鸿蒙HarmonyOS NEXT开发:简易贪吃蛇小游戏的实现(撞墙、吃到自己、方向控制、吃到东西长大判断等)

效果图

一、全局变量和状态变量定义

  1. 游戏区域表示(@State area:number [][])

    • area是一个二维数组,它在整个贪吃蛇游戏中扮演着至关重要的角色,代表着游戏的运动区域。这个二维数组中的每个元素都存储着一个数字,这些数字代表着不同的游戏元素状态。
    • 初始状态下,这个数组是空的,通过initArea函数进行初始化。初始化后,它将变成一个 25x25 的二维数组,其中每个位置的值初始为 0。这个 0 值在游戏中代表着空白区域,即没有蛇的身体部分也没有能量(食物)的位置。
  2. 方向控制(@State directions 和 @State tryDirections)

    • directions表示当前运动方向,它可以取值为 'up'(上)、'down'(下)、'left'(左)或 'right'(右)。初始时被设置为 'right',这意味着蛇在游戏开始时将向右移动。
    • tryDirections用于存储玩家尝试改变的方向,同样可以取上述四个方向的值。它的作用是当玩家按下方向控制按钮时,这个变量会被更新为玩家想要尝试的方向。但是,蛇不能立即向相反的方向移动,所以在更新实际的移动方向时,需要检查tryDirections与当前的directions是否冲突。如果不冲突,才会更新directionstryDirections的值。
  3. 历史位置记录(@State historyPosition:number [][])

    • historyPosition是一个数组,其中的每个元素也是一个数组,存储着蛇在游戏过程中经过的位置。这个数组在蛇移动时起着关键作用,用于更新蛇头和蛇尾的位置。
    • 当蛇移动时,蛇头的新位置会被添加到这个数组中。如果蛇没有吃到能量,那么蛇尾的位置会从这个数组中移除,以实现蛇的移动效果。通过记录蛇的历史位置,可以准确地确定蛇的长度和形状,以及在需要时更新蛇的外观。
  4. 头部坐标和长度(@State headX、@State headY 和 @State length)

    • headXheadY分别表示蛇头的横坐标和纵坐标。它们确定了蛇在游戏区域中的具体位置。初始时,蛇头的位置是通过initArea函数设置的,通常在游戏区域的特定位置。
    • length表示蛇的长度。这个变量在游戏开始时根据初始蛇的长度进行设置,并且会随着蛇吃到能量而增加。蛇的长度是衡量游戏进程的一个重要指标,它不仅影响着游戏的难度,还决定了蛇是否占满全屏从而导致游戏结束。
  5. 颜色定义(@State colors:ResourceColor [])

    • colors是一个数组,定义了不同状态所对应的颜色。这个数组中的元素分别对应着游戏中的不同元素。例如,数组中的第一个元素通常是透明颜色,代表空白区域;第二个元素可能是黑色,代表蛇的身体部分;第三个元素可能是橙色,代表能量的颜色。
    • 通过使用这些颜色,可以在游戏界面中清晰地区分不同的元素,使玩家能够直观地看到蛇、能量和空白区域。这样的颜色定义增强了游戏的视觉效果,提高了游戏的可玩性。
  6. 结束提示(@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数组中,以便在游戏过程中能够跟踪蛇的移动。
  • 初始化其他状态变量:除了设置蛇的初始位置,函数还初始化了其他重要的状态变量。它将头部坐标headXheadY设置为蛇头的初始位置,确保蛇头在游戏开始时位于正确的位置。同时,初始化蛇的长度length为初始蛇的长度,通常是根据初始蛇的身体部分数量来确定。此外,清空结束提示信息end,将其设置为空字符串,表示游戏正在进行中。最后,将方向directionstryDirections都设置为右,确定蛇的初始移动方向为向右。
  // 初始化
  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值