2024年2月8日发(作者:)
(完整)VB实现贪吃蛇小游戏
VB实现贪吃蛇小游戏
——比较适合VB初学者,属原创作品
图1
图2
(完整)VB实现贪吃蛇小游戏
图3
如图1所示,布置控件,其中有4个timer控件,1个picture控件(底图),4个command控件(上下左右),10个label控件.
其他功能都在程序里实现,其中贪吃蛇都是由点来组成的,初学者主要学习一下timer控件的应用,还有贪吃蛇拐弯怎么实现的.图2、图3是游戏视图.
主程序:
Public a, b, f As Double: Public i, j, c, d, e, g, h, z As Integer
Dim aa(100) As Double: Dim bb(100) As Double
Private Sub Form_Load()
a = 100: b = 300: c = 4 'a、b定义第一个点(红点)位置,c能控制蓝点数量
g = 2000: h = 2000
al = (200 — z * 30) ’定义每个定时器间隔时间 0.2S
Timer2。Interval = (200 - z * 30)
Timer3。Interval = (200 — z * 30)
al = (200 - z * 30)
Timer5。Interval = 300
Timer1。Enabled = True '初设一开始向右走
d = False
d = False
Timer4。Enabled = False
End Sub
Private Sub Timer1_Timer() '向右走
(完整)VB实现贪吃蛇小游戏
'没循环一次就清除上一次画的图像,要不就看不出运动了
dth = 10 '定义画图粗细
b = b + 100 ’b每次都加100,画图后坐标就变了
aa(i) = a
bb(j) = b
(b, a), vbRed ’绘制第一个点(红)
For k = 1 To c '此k-for循环从1到c,绘制c个蓝色点
If aa(99) = 0 Then '如果游戏刚开始,以下绘制方法,一开始j=0,j—k为负,bb(j—k)与aa(j-k)数组无效,因此在j〈=c时单独绘制
If j <= c And i <= c Then
f = 400 - 100 * (k - j)
(f, 100), vbBlue
Else
Picture1。PSet (bb(j — k), aa(i - k)), vbBlue ’其他情况时,蓝点走过红点的轨迹
End If
End If
If aa(99) <〉 0 Or bb(99) 〈> 0 Then ’如果时j和i运行到99后变为0,则bb(0)为红点时,蓝点必须走bb(99)、bb(98).。..
If j 〈= c And i <= c Then
d = 100 — k + j: e = 100 — k + i ’此行与以下两行作用就是为了实现蓝点绘制时混合了。。.bb(0)、bb(99).。.的情况
If d >= 100 Then d = d - 100
If e >= 100 Then e = e — 100
Picture1。PSet (bb(d), aa(e)), vbBlue
Else
Picture1。PSet (bb(j - k), aa(i - k)), vbBlue
End If
End If
Next k
If b > 4900 Or b 〈 100 Or a 〉 4900 Or a 〈 100 Then '碰墙则重新开始,以下进行了数据重置和清零
j = —1: i = —1: b = 300: a = 100: c = 4: z = 0 '如果碰墙了,j=-1时因为运行完了 后面有j=j+1,这样j就等于0了,把a、b重置
MsgBox (”对不起!您碰墙了!接下来将重新开始游戏!”)
For o = 0 To 99
aa(o) = 0: bb(o) = 0 ’把aa()、bb()数组中所有的数清零
Next o
End If
If j 〉 c Then '咬尾了就重新开始游戏,以下进行了数据重置和清零
For p = 1 To c
If bb(j) = bb(j - p) And aa(i) = aa(i - p) Then
j = —1: i = -1: b = 300: a = 100: c = 4: z = 0
MsgBox (”对不起!您咬尾了!接下来将重新开始游戏!”)
For o = 0 To 99
aa(o) = 0: bb(o) = 0
Next o
Exit For
End If
Next p
End If
j = j + 1
i = i + 1
If j = 100 Or i = 100 Then j = 0: i = 0 'j现在另j到了100就变0
End Sub
Private Sub Timer2_Timer() ’向左走
dth = 10
b = b — 100
aa(i) = a
bb(j) = b
Picture1。PSet (b, a), vbRed
For k = 1 To c
If aa(99) = 0 Then
If j <= c And i <= c Then
(400 - 100 * (k - j), 100), vbBlue
Else
(bb(j - k), aa(i — k)), vbBlue
End If
End If
If aa(99) 〈〉 0 Or bb(99) <〉 0 Then
If j 〈= c And i <= c Then
d = 100 — k + j: e = 100 — k + i
If d >= 100 Then d = d — 100
If e >= 100 Then e = e - 100
Picture1。PSet (bb(d), aa(e)), vbBlue
Else
Picture1。PSet (bb(j — k), aa(i - k)), vbBlue
End If
End If
Next k
If b 〉 4900 Or b < 100 Or a > 4900 Or a 〈 100 Then
j = -1: i = -1: b = 300: a = 100: c = 4: z = 0
MsgBox (”对不起!您碰墙了!接下来将重新开始游戏!")
(完整)VB实现贪吃蛇小游戏
不能持续增长,有可能会溢出,
(完整)VB实现贪吃蛇小游戏
For o = 0 To 99
aa(o) = 0: bb(o) = 0
Next o
d = False
d = True
End If
If j 〉 c Then
For p = 1 To c
If bb(j) = bb(j — p) And aa(i) = aa(i — p) Then
j = —1: i = —1: b = 300: a = 100: c = 4: z = 0
MsgBox (”对不起!您咬尾了!接下来将重新开始游戏!")
For o = 0 To 99
aa(o) = 0: bb(o) = 0
Next o
d = False
Timer1。Enabled = True
Exit For
End If
Next p
End If
j = j + 1
i = i + 1
If j = 100 Or i = 100 Then j = 0: i = 0
End Sub
Private Sub Timer3_Timer() ’向下走
Picture1。DrawWidth = 10
a = a + 100
aa(i) = a
bb(j) = b
(b, a), vbRed
For k = 1 To c
If aa(99) = 0 Then
If j 〈= c And i 〈= c Then
(f, 100 — 100 * (k - j)), vbBlue
Else
Picture1。PSet (bb(j — k), aa(i — k)), vbBlue
End If
End If
If aa(99) <〉 0 Or bb(99) 〈〉 0 Then
If j 〈= c And i <= c Then
d = 100 - k + j: e = 100 — k + i
If d >= 100 Then d = d — 100
(完整)VB实现贪吃蛇小游戏
If e 〉= 100 Then e = e - 100
Picture1。PSet (bb(d), aa(e)), vbBlue
Else
Picture1。PSet (bb(j — k), aa(i — k)), vbBlue
End If
End If
Next k
If b 〉 4900 Or b < 100 Or a 〉 4900 Or a < 100 Then
j = —1: i = —1: b = 300: a = 100: c = 4: z = 0
MsgBox ("对不起!您碰墙了!接下来将重新开始游戏!")
For o = 0 To 99
aa(o) = 0: bb(o) = 0
Next o
Timer3。Enabled = False
d = True
End If
If j > c Then
For p = 1 To c
If bb(j) = bb(j — p) And aa(i) = aa(i — p) Then
j = -1: i = -1: b = 300: a = 100: c = 4: z = 0
MsgBox (”对不起!您咬尾了!接下来将重新开始游戏!”)
For o = 0 To 99
aa(o) = 0: bb(o) = 0
Next o
d = False
d = True
Exit For
End If
Next p
End If
j = j + 1
i = i + 1
If j = 100 Or i = 100 Then j = 0: i = 0
End Sub
Private Sub Timer4_Timer() '向上走
Picture1。DrawWidth = 10
a = a — 100
aa(i) = a
bb(j) = b
Picture1。PSet (b, a), vbRed
For k = 1 To c
If aa(99) = 0 Then
(完整)VB实现贪吃蛇小游戏
If j <= c And i <= c Then
Picture1。PSet (400 — 100 * (k - j), 100), vbBlue
Else
(bb(j — k), aa(i — k)), vbBlue
End If
End If
If aa(99) <〉 0 Or bb(99) <> 0 Then
If j 〈= c And i 〈= c Then
d = 100 — k + j: e = 100 - k + i
If d >= 100 Then d = d - 100
If e 〉= 100 Then e = e — 100
Picture1。PSet (bb(d), aa(e)), vbBlue
Else
Picture1。PSet (bb(j - k), aa(i - k)), vbBlue
End If
End If
Next k
If b 〉 4900 Or b 〈 100 Or a > 4900 Or a < 100 Then
j = -1: i = -1: b = 300: a = 100: c = 4: z = 0
MsgBox (”对不起!您碰墙了!接下来将重新开始游戏!")
For o = 0 To 99
aa(o) = 0: bb(o) = 0
Next o
Timer4。Enabled = False
Timer1。Enabled = True
End If
If j 〉 c Then
For p = 1 To c
If bb(j) = bb(j — p) And aa(i) = aa(i - p) Then
j = -1: i = -1: b = 300: a = 100: c = 4: z = 0
MsgBox (”对不起!您咬尾了!接下来将重新开始游戏!")
For o = 0 To 99
aa(o) = 0: bb(o) = 0
Next o
d = False
d = True
Exit For
End If
Next p
End If
j = j + 1
i = i + 1
If j = 100 Or i = 100 Then j = 0: i = 0
End Sub
(完整)VB实现贪吃蛇小游戏
Private Sub Command1_Click() '上
If Timer3。Enabled = False Then
Timer2。Enabled = False
d = False
Timer4。Enabled = True
End If
End Sub
Private Sub Command2_Click() ’下
If d = False And j > c Then
Timer1。Enabled = False
Timer2。Enabled = False
d = True
End If
End Sub
Private Sub Command3_Click() '左
If d = False Then
Timer3。Enabled = False
d = False
Timer2。Enabled = True
End If
End Sub
Private Sub Command4_Click() ’右
If Timer2。Enabled = False Then
d = False
d = False
Timer1。Enabled = True
End If
End Sub
Private Sub picture1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 38 And d = False Then ’上
d = False
'd = False
Timer1。Enabled = False
Timer4。Enabled = True
End If
If KeyCode = 40 And d = False And j > c Then '下
Timer2。Enabled = False
Timer1。Enabled = False
'd = False
Timer3。Enabled = True
End If
(完整)VB实现贪吃蛇小游戏
If KeyCode = 37 And Timer1。Enabled = False Then ’左
’d = False
Timer3。Enabled = False
Timer4。Enabled = False
Timer2。Enabled = True
End If
If KeyCode = 39 And d = False Then ’右
'Timer2。Enabled = False
Timer3。Enabled = False
Timer4。Enabled = False
Timer1。Enabled = True
End If
End Sub
Private Sub Timer5_Timer()
Picture1。DrawWidth = 7
(g, h), RGB(50, 50, 0)
If b = g And a = h Then
g = (Int(Rnd * 48) + 1) * 100
h = (Int(Rnd * 48) + 1) * 100
c = c + 1
End If
If c = 30 Then
z = z + 1
j = 0: i = 0: b = 300: a = 100: c = 4
MsgBox (”恭喜您!进入下一关!”)
For o = 0 To 99
aa(o) = 0: bb(o) = 0
Next o
Timer4。Enabled = False
d = False
Timer2。Enabled = False
Timer1。Enabled = True
End If
If p = 6 Then
MsgBox ("您真是快手王啊!重新开始吧!”)
j = -1: i = —1: b = 300: a = 100: c = 4: z = 0
MsgBox (”对不起!您咬尾了!接下来将重新开始游戏!")
For o = 0 To 99
aa(o) = 0: bb(o) = 0
Next o
(完整)VB实现贪吃蛇小游戏
End If
Timer1。Interval = (200 - z * 30) ’定义每个定时器间隔时间 0。2S
al = (200 — z * 30)
Timer3。Interval = (200 - z * 30)
Timer4。Interval = (200 - z * 30)
Label3。Caption = g
n = h
Label5。Caption = c + 1
Label6。Caption = z + 1
End Sub
主程序结束
发布者:admin,转转请注明出处:http://www.yc00.com/web/1707379298a1499271.html
评论列表(0条)