效果图
一、全局变量和状态变量定义
-
游戏区域表示(@State area:number [][]):
area
是一个二维数组,它在整个贪吃蛇游戏中扮演着至关重要的角色,代表着游戏的运动区域。这个二维数组中的每个元素都存储着一个数字,这些数字代表着不同的游戏元素状态。- 初始状态下,这个数组是空的,通过
initArea
函数进行初始化。初始化后,它将变成一个 25x25 的二维数组,其中每个位置的值初始为 0。这个 0 值在游戏中代表着空白区域,即没有蛇的身体部分也没有能量(食物)的位置。
-
方向控制(@State directions 和 @State tryDirections):
directions
表示当前运动方向,它可以取值为 'up'(上)、'down'(下)、'left'(左)或 'right'(右)。初始时被设置为 'right',这意味着蛇在游戏开始时将向右移动。tryDirections
用于存储玩家尝试改变的方向,同样可以取上述四个方向的值。它的作用是当玩家按下方向控制按钮时,这个变量会被更新为玩家想要尝试的方向。但是,蛇不能立即向相反的方向移动,所以在更新实际的移动方向时,需要检查tryDirections
与当前的directions
是否冲突。如果不冲突,才会更新directions
为tryDirections
的值。
-
历史位置记录(@State historyPosition:number [][]):
historyPosition
是一个数组,其中的每个元素也是一个数组,存储着蛇在游戏过程中经过的位置。这个数组在蛇移动时起着关键作用,用于更新蛇头和蛇尾的位置。- 当蛇移动时,蛇头的新位置会被添加到这个数组中。如果蛇没有吃到能量,那么蛇尾的位置会从这个数组中移除,以实现蛇的移动效果。通过记录蛇的历史位置,可以准确地确定蛇的长度和形状,以及在需要时更新蛇的外观。
-
头部坐标和长度(@State headX、@State headY 和 @State length):
headX
和headY
分别表示蛇头的横坐标和纵坐标。它们确定了蛇在游戏区域中的具体位置。初始时,蛇头的位置是通过initArea
函数设置的,通常在游戏区域的特定位置。length
表示蛇的长度。这个变量在游戏开始时根据初始蛇的长度进行设置,并且会随着蛇吃到能量而增加。蛇的长度是衡量游戏进程的一个重要指标,它不仅影响着游戏的难度,还决定了蛇是否占满全屏从而导致游戏结束。
-
颜色定义(@State colors:ResourceColor []):
colors
是一个数组,定义了不同状态所对应的颜色。这个数组中的元素分别对应着游戏中的不同元素。例如,数组中的第一个元素通常是透明颜色,代表空白区域;第二个元素可能是黑色,代表蛇的身体部分;第三个元素可能是橙色,代表能量的颜色。- 通过使用这些颜色,可以在游戏界面中清晰地区分不同的元素,使玩家能够直观地看到蛇、能量和空白区域。这样的颜色定义增强了游戏的视觉效果,提高了游戏的可玩性。
-
结束提示(@State end:string):
end
是一个字符串变量,用于存储游戏结束的提示信息。初始状态下,它是空字符串,表示游戏正在进行中。- 当游戏结束时,根据结束的原因,这个变量会被设置为相应的提示信息。例如,如果蛇吃到了自己,
end
将被设置为 “吃到自己了 游戏结束!”;如果蛇撞墙了,end
将被设置为 “撞墙了 游戏结束!”。这个提示信息可以在游戏界面中显示给玩家,让他们知道游戏已经结束以及结束的原因。
// 二维数组 表示运动区域
@State area:number[][] = []
// 当前运动方向
@State directions: 'up'| 'down'| 'left'| 'right' = 'right'
// 控制方向
@State tryDirections: 'up'| 'down'| 'left'| 'right' = 'right'
// 历史位置 用于蛇移动时更新蛇头和蛇尾
@State historyPosition:number[][]=[]
// 头部坐标
@State headX:number = 0
@State headY:number = 0
// 蛇的长度
@State length:number = 0
// 颜色 不同的表示渲染不同等等颜色
@State colors:ResourceColor[]=[Color.Transparent, Color.Black, Color.Orange]
//结束提示
@State end:string=''
二、函数定义模块
初始化函数:initArea:
- 重置游戏区域:这个函数首先负责重置游戏区域
area
。它通过两个嵌套的循环,将area
初始化为一个 25x25 的二维数组,每个位置的值都设置为 0。这一步确保了游戏在每次开始或重新开始时,游戏区域都是干净的,没有任何蛇的身体部分或能量。 - 初始化蛇的位置:接着,函数在特定的位置设置蛇的初始位置。例如,将
area[4][6]
到area[4][10]
的值设置为 1,表示蛇的身体部分。这意味着在游戏开始时,蛇的身体占据了这些位置。同时,将这些位置添加到historyPosition
数组中,以便在游戏过程中能够跟踪蛇的移动。 - 初始化其他状态变量:除了设置蛇的初始位置,函数还初始化了其他重要的状态变量。它将头部坐标
headX
和headY
设置为蛇头的初始位置,确保蛇头在游戏开始时位于正确的位置。同时,初始化蛇的长度length
为初始蛇的长度,通常是根据初始蛇的身体部分数量来确定。此外,清空结束提示信息end
,将其设置为空字符串,表示游戏正在进行中。最后,将方向directions
和tryDirections
都设置为右,确定蛇的初始移动方向为向右。
// 初始化
initArea(){
// 25 * 25 初始化地图
this.area = []
for(let i=0;i<25;i++){
this.area.push([])
for(let j=0;j<25;j++){
this.area[i].push(0)
}
}
// 对蛇初始化
this.area[4][6]=1
this.area[4][7]=1
this.area[4][8]=1
this.area[4][9]=1
this.area[4][10]=1
// 初始化历史位置
this.historyPosition=[]
this.historyPosition.push([6,4])
this.historyPosition.push([7,4])
this.historyPosition.push([8,4])
this.historyPosition.push([9,4])
this.historyPosition.push([10,4])
// 初始化头部位置
this.headX = 10
this.headY = 4
// 初始化蛇的长度
this.length = 5
// 初始化 结束提示
this.end=''
// 初始化方向以及想尝试的方向 为右
this.directions = 'right'
this.tryDirections = 'right'
}
游戏逻辑更新函数:aboutToAppear(生命周期函数):
- 初始化游戏状态:这个函数在游戏开始时被调用&#x