刘金玉的零基础VB教程066期:贪吃蛇游戏开发第二节 让蛇动起来
基本思路
原理:贪吃蛇的运动相当于插入一个头结点,删除一个尾节点,如此循环
VB中的代码思路
默认向右移动的情况下:
1、直接将每个节点数据向左移动一个
2、将最后一个节点重新赋值
3、赋值时候必须要注意方向
控制蛇的方向
原则:不能让蛇进行往返,通过控制按键的值与原方向的值的差值的绝对值不等于2,来赋值
课堂总结
1、要让蛇运动,要用到时钟控件
2、每次时钟执行的代码必须要刷新界面cls,清除原先绘画出来的蛇身,根据新的数据来刷新蛇身
3、每次运动的数据是将所有数据从蛇头开始项蛇身后赋值一格,根据当前方向,改变蛇头方向
4、数据与绘画独立处理
程序界面:
程序代码:
Private Type Node '每一节蛇身 D As Integer '37左38上39右40下 X As Single 'left Y As Single 'top End Type Dim W As Integer '每一节蛇身宽度 Dim sno() As Node '声明一条蛇,是动态数组 Dim currentDirect As Integer '代表蛇运动的当前方向 Private WithEvents timer1 As Timer '初始化一条蛇的各个参数 Function init() AutoRedraw = True '自动重绘 W = 200 currentDirect = 39 '默认向右运动 ReDim sno(5) As Node '初始化各个坐标点 Dim i As Long For i = 0 To UBound(sno) Step 1 sno(i).D = currentDirect sno(i).X = ScaleWidth / 2 + i * W sno(i).Y = ScaleHeight / 2 Next i End Function '画一条蛇 Function drawSnake() Cls Dim i As Long For i = 0 To UBound(sno) Step 1 Line (sno(i).X, sno(i).Y)-(sno(i).X + W, sno(i).Y + W), vbBlue, BF Next i End Function Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) If Abs(currentDirect - KeyCode) <> 2 Then currentDirect = KeyCode End Sub Private Sub Form_Load() Call init Call drawSnake '对时钟控件进行初始化 Set timer1 = Controls.Add("vb.timer", "timer1") timer1.Interval = 100 timer1.Enabled = True End Sub '运动思路:插入头结点,删除尾节点 Function sport() Dim i As Long '将每一个节点数据向前移动一位 For i = 1 To UBound(sno) Step 1 sno(i - 1) = sno(i) Next i '将头结点,也就是数组的最后一位重新复制 If currentDirect = 37 Then sno(UBound(sno)).X = sno(UBound(sno)).X - W ElseIf currentDirect = 38 Then sno(UBound(sno)).Y = sno(UBound(sno)).Y - W ElseIf currentDirect = 39 Then sno(UBound(sno)).X = sno(UBound(sno)).X + W ElseIf currentDirect = 40 Then sno(UBound(sno)).Y = sno(UBound(sno)).Y + W End If End Function Private Sub timer1_Timer() Call sport Call drawSnake End Sub