VB贪吃蛇
vb吧
全部回复
仅看楼主
level 5
slippermummy 楼主
哇哈哈终于写完了

2010年08月27日 05点08分 1
level 9
这个还有古诗的、好友创意啊
2010年08月27日 05点08分 2
level 5
slippermummy 楼主
'[email protected]
'!!!先把Form1的BorderStyle属性设为0-None
Option Explicit
Option Base 1
Dim WithEvents Tim As Timer '定时器
Dim CmdTxt$(12), CmdA!(6, 2), Ctr(8) As Byte, CmdRGB(0 To 6, 3) As Byte   '窗体按钮相关,分别是显示字符,地址,"控制开关",颜色...
'ctr(6)=1时计时器interval=0,ctr(7)=1时,按下方向键无效
Dim r! '步距(蛇身宽度)
Dim Word$() '蛇身
Dim A!()   '蛇身的地址
Dim ColorPoint() As Byte, wRGB() As Byte   '用于指示和存储字符对象的颜色
Dim PNum% '实时显示字符数
Dim DirCode% '决定着蛇头的运动方向
Dim Txt$ '句子(决定蛇长)
Dim row As Byte, col As Byte   '行,列数(决定窗口内最多能容纳多少蛇身字符)
Dim WordSize As Integer '字体大小(也决定了窗口总尺寸大小),(窗体大小=wordsize*r*行,列数)
Sub GameOver(t As String)
Ctr(8) = 1
Me.FontSize = WordSize * 1.5
Me.ForeColor = vbRed
If Me.TextWidth(t) <= Me.Width Then
CurrentX = (Me.Width - Me.TextWidth(t)) / 2
CurrentY = (Me.Height - Me.TextHeight(t)) / 2
Print t
Else
Dim n As Byte
CurrentY = (Me.Height - Me.TextHeight(t)) / 2 - Me.TextHeight(t)
For n = 1 To Len(t)
If CurrentX + Me.TextWidth(Mid(t, n, 1)) < Me.Width Then
Print Mid(t, n, 1);
Else
CurrentX = 0
CurrentY = CurrentY + r * 2
Print Mid(t, n, 1);
End If
Next
End If
End Sub
Sub SetSnake() '创建一条蛇
Dim t$, n%, i As Byte
Me.FontSize = WordSize
r = Me.TextHeight("蛇") '步距大小(字高)
Me.Width = r * col: Me.Height = r * row '场地大小
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2 '居中显示
CmdA(1, 1) = 0: CmdA(1, 2) = Me.Height - r * 1.5 * 2 '//设置按钮在屏幕上显示的地址:
CmdA(2, 1) = 0: CmdA(2, 2) = Me.Height - r * 1.5
CmdA(3, 1) = Me.Width - r * 1.5: CmdA(3, 2) = 0
CmdA(4, 1) = Me.Width - r * 1.5: CmdA(4, 2) = r * 1.5
CmdA(5, 1) = Me.Width - r * 1.5: CmdA(5, 2) = r * 3
CmdA(6, 1) = CmdA(5, 1): CmdA(6, 2) = CmdA(5, 2)
Do '//句子输入 (输入的这句话将化为蛇身):
t = Trim(InputBox("游戏开始前,请您先在下框中输入一句话吧:" & Chr(13) & "[或者随便复制一段文本粘贴到下框中]" & Chr(13) & Chr(13) & "[▲若想让字符以不同的颜色显示,请用空格隔开]", "游戏开始前", "I LOVE YOU FOREVER ☆"))
Txt = Replace(t, " ", "") '去除所有空格
If Txt = "" Then
End
ElseIf Len(Txt) < 3 Then
n = MsgBox(Len(Txt) & "个字符也太少了点吧,这句话至少要由3个字符组成(不计空格)" & Chr(13) & Chr(13) & "                 >>>   请您重新输入   <<<", 0, "提示")
End If
Loop While Len(Txt) < 3
For n = 1 To Len(t) '//去除句子中多余的空格:
t = Replace(t, "   ", " ")
Next
t = t & " "
ReDim Word$(Len(Txt)), A!(Len(Txt), 2), wRGB(Len(t) - Len(Txt), 3) As Byte, ColorPoint(Len(t) - Len(Txt)) As Byte   '划分内存空间
i = 0 '//蛇身颜色指示器:
For n = 1 To Len(t)
If Mid(t, n, 1) = " " Then
i = i + 1
ColorPoint(i) = n - i

2010年08月27日 06点08分 3
level 5
slippermummy 楼主
End If
Next
For n = 1 To Len(Txt) '//把蛇分节:
Word(n) = Mid(Txt, n, 1)
Next n
Ctr(8) = 1
Call Init '初始化
End Sub
Sub Init() '//初始化:
Dim n%, i As Byte
n = Ctr(6)
If Ctr(8) = 0 Then
Ctr(6) = 1
If MsgBox("游戏还未结束,您确定要重新开始吗?", 1, "提示") = 2 Then
Ctr(6) = n
Exit Sub
End If
End If
Ctr(6) = 0
Ctr(8) = 0
For n = 1 To UBound(wRGB) '//生成蛇身颜色:
For i = 1 To 3
wRGB(n, i) = Int(Rnd * 256)
Next i
Next n
A(1, 1) = 0: A(1, 2) = 0 '蛇头的初始地址
DirCode = 39 '决定初始方向
PNum = 2 '刚开始只显示两个字符
Call AddWord '添加第2个字符(第一个食物)
End Sub
Sub Custom()
On Error Resume Next '跳过错误
Dim n%: n = Ctr(6)
Ctr(6) = 1 '先暂停游戏
If Ctr(8) = 0 Then
If MsgBox("此操作后游戏将重新开始,您确定要继续吗?", 1, "提示") = 2 Then
Ctr(6) = n
Exit Sub
End If
End If
Do
Tim.Interval = InputBox("定时器时间直接决定了游戏的速度,取值越短则游戏速度越快" & Chr(13) & Chr(13) & "[▲取值在25-500(毫秒)之间]", "①   设置刷屏时间(修改游戏速度)", 200)
Loop While (Tim.Interval < 25) + (Tim.Interval > 500)
Do
row = InputBox("行数指每列最多容纳的字符个数(蛇身), 影响屏幕高度" & Chr(13) & Chr(13) & "[若超出显示范围则以显示器边界做为游戏界线]" & Chr(13) & Chr(13) & "[▲取值不得小于10]", "②   设置行数", 15)
Loop While row < 10
Do
col = InputBox("列数指每行最多容纳的字符个数(蛇身), 相当于“掌中宝”游戏机的横向点阵数" & Chr(13) & Chr(13) & "[若超出显示范围则以显示器边界做为游戏界线]" & Chr(13) & Chr(13) & "[▲取值不得小于10]", "③   设置列数", 31)
Loop While row < 10
Do
WordSize = InputBox("请输入字符大小.单位:(磅)" & Chr(13) & Chr(13) & "[决定了游戏元素及界面的大小]" & Chr(13) & Chr(13) & "[▲取值在10-40之间]", "④   设置文字大小", 18)
Loop While (WordSize < 10) + (WordSize > 50)
Me.FontName = InputBox("请输入本机能够识别的字体类型:" & Chr(13) & Chr(13) & "[若输入无法识别的字体类型将自动跳过本环节]" & Chr(13) & Chr(13) & "[▲本机字体详见C:\WINDOWS\Fonts文件夹下]", "⑤   设置字体类型", "宋体") '设置字体
Call SetSnake
End Sub
Sub SnakeMove() '蛇的活动过程
Dim n%
For n = 2 To PNum '//蛇头与其它字符相接触判断:如果撞到蛇身则游戏结束,如果吃到到食物就把食物变成新的尾巴
If (A(1, 1) = A(n, 1)) * (A(1, 2) = A(n, 2)) Then
If n <> PNum Then '撞到蛇身则游戏结束
GameOver ("您的蛇蛇把自己咬了^__^")
ElseIf n = Len(Txt) Then '游戏胜利
GameOver ("恭喜,您胜利啦!")
ElseIf n = PNum Then '吃到食物则显示的字符数加1(新的食物)
PNum = PNum + 1
Call AddWord '添加新食物
End If
End If
Next n
For n = PNum - 2 To 1 Step -1 '//蛇身向前移动一格
A(n + 1, 1) = A(n, 1): A(n + 1, 2) = A(n, 2)
Next n
Ctr(7) = 0 '键盘解锁
Select Case DirCode '//决定蛇头运动方向:
Case 37, 65
A(1, 1) = A(1, 1) - r '向左运动
Case 38, 87

2010年08月27日 06点08分 4
level 5
slippermummy 楼主
Dim i As Byte
For i = 1 To 5
Ctr(i) = IIf((X > CmdA(i, 1)) * (Y > CmdA(i, 2)) * (X < CmdA(i, 1) + r * 1.5) * (Y < CmdA(i, 2) + r * 1.5), 1, 0)
Next
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Ctr(2) = 1 Then '按下帮助按钮
AboutGame
ElseIf Ctr(3) = 1 Then '按下关闭按钮退出程序
End
ElseIf Ctr(1) = 1 Then '按下自定义按钮
Custom
ElseIf Ctr(4) = 1 Then '按下"重玩按钮:
Init
ElseIf (Button = 2) + (Ctr(5) = 1) Then '鼠标右键或暂停按钮切换暂停与活动状态
Ctr(6) = IIf(Ctr(6) = 0, 1, 0)
ElseIf (Ctr(6) = 0) * (Ctr(7) = 0) Then '//用鼠标控制移动:
Select Case DirCode
Case 38, 40, 87, 83
If Abs(X - A(1, 1) - r / 2) > r / 2 Then DirCode = IIf(X - A(1, 1) > 0, 39, 37) Else Exit Sub
Case 37, 39, 65, 68
If Abs(Y - A(1, 2) - r / 2) > r * 0.8 Then DirCode = IIf(Y - A(1, 2) > 0, 40, 38) Else Exit Sub
End Select
Ctr(7) = 1 '锁定(在蛇做改变方向之前不能改dircode)
End If
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 112: AboutGame
Case 27: End '按ESC键退出游戏
Case 84: Custom '按下T键自定义游戏
Case 82: Init '按R键重玩游戏
Case 13, 32: Ctr(6) = IIf(Ctr(6) = 0, 1, 0) '按下空格或回车切换暂停状态
End Select
If (Ctr(6) = 0) * (Ctr(7) = 0) Then
Ctr(7) = 1 '相当于键盘锁吧
Select Case DirCode
Case 37, 39, 65, 68 '当按下←或→键是再按←→键无效
     Select Case KeyCode
     Case 38, 40, 87, 83
     DirCode = KeyCode
     End Select
Case 38, 40, 87, 83 '当按下↑或↓键是再按↑↓键无效
     Select Case KeyCode
     Case 37, 39, 65, 68
     DirCode = KeyCode
     End Select
End Select
End If
End Sub
Sub AboutGame()
Dim n%: n = Ctr(6)
Ctr(6) = 1
Print MsgBox("--游戏控制--" & Chr(13) & "控制方向     :←,↑,→,↓或A,W,D,S以及鼠标左键" & Chr(13) & "暂停与撤销:Space,Enter,鼠标右键" & Chr(13) & "重玩             :R" & Chr(13) & "自定义游戏:T" & Chr(13) & "游戏信息     :F1" & Chr(13) & "退出游戏     :ESC" _
& Chr(13) & Chr(13) & "--关于游戏--" & Chr(13) & "其实写出贪吃蛇的主程序后就没多大兴致了...硬着头皮为它加了一些辅助功能和菜单...现在总算解脱了...索要源码和报错可以联系:[email protected](业余菜鸟..源码比较不堪入目)" & Chr(13) & _
Space(130) & "lyxue" & Chr(13) & Space(126) & "2010-8-27", , "游戏信息")
Ctr(6) = n
End Sub
2010年08月27日 06点08分 6
@slippermummy 我制作一个游戏,其中有点内容想仿照你的贪食蛇,不介意吧?
2014年08月14日 06点08分
2014年08月14日 06点08分
回复 124127623 :小爷您太客气了
2014年08月17日 04点08分
狗眼已瞎。。。[赖皮]
2014年08月17日 11点08分
level 13
看来我的楼层合并功能又派上作用了[傻笑]
2010年08月27日 06点08分 11
吧主掉牙了[傻笑]
2014年08月14日 07点08分
level 1
创意是不错,画面效果有待改进
2010年08月27日 06点08分 12
level 13
先不说程序好坏,创意不错,值得支持。
2010年08月27日 06点08分 14
level 10
膜拜该创意
支持开源
2010年08月27日 11点08分 16
level 2
很好很好,最近都不知道写些什么东西,但是贫吃蛇这东西好像过时了,再加上快开学了,索性就放松下好咯。[顶]
不错不错。很有创意。[顶]
有些细节部分麻烦处理下。我这编译好像出问题了。
2010年08月27日 12点08分 17
贫 吃蛇
2015年12月21日 02点12分
level 5
slippermummy 楼主
7-10楼代码重复了,麻烦吧主删一下[我错了]吧
2010年08月27日 14点08分 18
level 1
太感谢你了
2013年01月07日 13点01分 21
level 12
还不如弄个压缩= =传邮箱= =这样又复制不了= =
[email protected]
言以致用
2013年01月17日 10点01分 22
猫有九条命。楼高了没事,矮了也没事,就怕那种不高不矮的。
2015年10月24日 09点10分
level 7
大神啊 这么多代码
2013年01月17日 15点01分 23
level 12
对啊,没想到看似简单游戏 这么多代码?能不能简化点啊[惆怅~]
2013年01月17日 16点01分 24
level 5
slippermummy 楼主
@佳佳盐 @雪夜公爵1 @14dragon @x斩月_大叔x
几年前的了,现在又被人挖出来。。。
现在VB基本忘光光了。。。
刚刚找出以前写的代码,传到网盘,自己去下吧:
[有效] http://pan.baidu.com/share/link?shareid=205222&uk=3842430137
2013年01月18日 06点01分 25
2013年01月18日 06点01分
回复 slippermummy :不错,特列为精品
2013年01月18日 06点01分
居然给加精了。。。(偷乐)。。。吧里很多都是新手吧,不过我现在觉得 Python 比 VB 更适合刚接触编程的初学者。。。吧主不会在意我在这妖言惑众(挖墙脚)
(黑人歪嘴)
吧
2013年01月18日 10点01分
围观加精
2013年01月27日 10点01分
level 7
很不错啊,围观了
2013年01月18日 07点01分 26
level 3
高手、、、、
2013年01月18日 11点01分 27
1 2 3 尾页