VisualFreeBasic游戏趣味编程_7.3_小蛇向右移动

2026-1-22 / 0 评论 / 60 阅读

实现小蛇的移动功能是“贪吃蛇”游戏的开发难点,图7-4列出了小蛇向右移动前后二维数组的元素值,虚线框内为对应代码的实现步骤:

假设小蛇初始元素值为54321,其中1为蛇头、5432为蛇身、最大值5为蛇尾。首先将二维数组中所有大于0的元素加1,得到65432;然后将最大值6变为0,即去除了原来的蛇尾;最后将2右边的元素由0变成1,即实现了小蛇向右移动。

定义函数moveSnake( )处理小蛇移动的相关操作:

Sub moveSnake() ' 移动小蛇及相关处理函数
   Dim i As Long, j As Long
   For i = 0 To BLOCK_HEIGHT -1 '对行遍历
      For j = 0 To BLOCK_WIDTH -1 '对列遍历
         If Blocks(i, j) > 0 Then '大于0的为小蛇元素
            Blocks(i, j) += 1 '让其+1
         End If
      Next
   Next
   Dim As Long oldTail_i, oldTail_j, oldHead_i, oldHead_j '定义变量,存储旧蛇尾、旧蛇头坐标
   Dim mm As Long '用于记录最大值
   For i = 0 To BLOCK_HEIGHT -1 '对行遍历
      For j = 0 To BLOCK_WIDTH -1 '对列遍历
         If mm < Blocks(i, j) Then '如果当前元素值比max大
            mm = Blocks(i, j) '更新max的值
            oldTail_i = i      ' 记录最大值的坐标,就是旧蛇尾的位置
            oldTail_j = j
         End If
         If Blocks(i, j) = 2 Then '找到数值为2
            oldHead_i = i ' 数值为2恰好是旧蛇头的位置
            oldHead_j = j '
         End If
      Next
   Next
   Dim newHead_i As Long = oldHead_i ' 设定变量存储新蛇头的位置
   Dim newHead_j As Long = oldHead_j
   newHead_j = oldHead_j + 1 ' 向右移动,更新蛇头坐标
   If newHead_j = BLOCK_WIDTH Then newHead_j = 0
   Blocks(newHead_i, newHead_j) = 1 ' 新蛇头位置数值为1
   Blocks(oldTail_i, oldTail_j) = 0 ' 旧蛇尾位置变成空白

End Sub

在updateWithoutInput( )函数中调用moveSnake( ):

Sub updateWithoutInput() '与输入无关的更新
   moveSnake()  '调用小蛇移动函数
End Sub

通过以上操作则实现了小蛇自动向右移动,效果如图7-5所示。

评论一下?

OωO
取消