首页 > 其他分享 >在鸿蒙NEXT中开发一个2048小游戏

在鸿蒙NEXT中开发一个2048小游戏

时间:2024-11-10 15:08:01浏览次数:1  
标签:Bold newArr 2048 NEXT rgb 小游戏 let fontSize 249

本项目是基于api12开发的2048游戏,游戏的逻辑是当用户向某个方向滑动时,将该方向相邻且相等的数字相加,同时在空白区域的随机位置生成一个随机数字。游戏中的数字越大,分数越高。

 

图片

 

首先,游戏的界面布局分别采用两个网格组件Grid来实现,难点在于上方的菜单栏是不均等的三种尺寸的组件,可以使用Grid的rowsTemplate和columnsTemplate属性来实现:

 

图片

 

Grid(){
            GridItem(){
              Column(){
                Text('2048')
                  .fontColor('rgb(249,249,249)')
                  .fontSize(35)
                  .fontWeight(FontWeight.Bold)
                Text('4*4')
                  .fontColor('rgb(249,249,249)')
                  .fontSize(22)
                  .fontWeight(FontWeight.Bold)
              }
            }
            .backgroundColor('rgb(239,202,26)')
            .borderRadius(10)
            .rowStart(1)
            .rowEnd(2)


            GridItem(){
              Column(){
                Text('分数')
                  .fontColor('rgb(232,232,232)')
                  .fontSize(15)
                  .fontWeight(FontWeight.Bold)
                Text(this.currentScore.toString())
                  .fontColor('rgb(249,249,249)')
                  .fontSize(25)
                  .fontWeight(FontWeight.Bold)
                  .margin({top:3})


              }
            }
            .backgroundColor('rgb(188,172,162)')
            .borderRadius(10)
            GridItem(){
              Column(){
                Text('最高分')
                  .fontColor('rgb(232,232,232)')
                  .fontSize(15)
                  .fontWeight(FontWeight.Bold)
                Text(this.highestScore.toString())
                  .fontColor('rgb(249,249,249)')
                  .fontSize(25)
                  .fontWeight(FontWeight.Bold)
                  .margin({top:3})
              }
            }
            .backgroundColor('rgb(188,172,162)')
            .borderRadius(10)




            GridItem(){
              Text('重新开始')
                .fontColor('rgb(249,249,249)')
                .fontSize(20)
                .fontWeight(FontWeight.Bold)
            }
            .backgroundColor('rgb(254,156,62)')
            .borderRadius(10)
            .onClick(()=>{
              this.startGame()
            })




            GridItem(){
              Text('返回菜单')
                .fontColor('rgb(249,249,249)')
                .fontSize(20)
                .fontWeight(FontWeight.Bold)
            }
            .backgroundColor('rgb(254,156,62)')
            .borderRadius(10)




          }
          .columnsTemplate('1fr 1fr 1fr')
          .rowsTemplate('2fr 1fr 1fr')
          .rowsGap(8)
          .columnsGap(8)
          .width('100%')
          .height(170)

在游戏逻辑的实现中,关键在于检测游戏中的空白格和相邻数字的相加操作,以及将它们放置到数组中对应的位置。

​比如此时游戏中有4个数字:

//0代表空白
let arr:number[] = [0,0,2,2,0,0,4,0,0,8,0,0,0,0,0,0]

以向左滑动为例,将所有数字向左滑动,并将相同的数字相加:

let newArr:number[] = Array(4).fill(0)
    let arrWithoutZero = arr.filter((x) => x !== 0) //去掉所有的0
    if (arrWithoutZero.length == 0) {
      return newArr
    }
    if (toHead) {
      for (let i = 0; i < arrWithoutZero.length; i++) {
        newArr[i] = arrWithoutZero[i]
      }
      for (let i = 0; i < newArr.length - 1; i++) {
        if (newArr[3 - i] === newArr[2 - i] && newArr[3 - i] !== 0) {
          newArr[3 - i] = 0
          newArr[2 - i] *= 2


          this.score = this.score + newArr[2 - i]
          console.log("得分:",this.score)


        }
      }
    }

随后,在随机的空白位置添加一个数字:

let cells:number[] = []
    for (let i = 0; i < 4; i++) {
      for (let j = 0; j < 4; j++) {
        if (!this.itemList[i][j]) {
          cells.push(i * 4 + j)
        }
      }
    }
let row = Math.floor(cellIndex / 4)
let col = cellIndex % 4
this.itemList[row][col] = this.getRandomValue()

这就是游戏的基本逻辑,比较简单,适合初学者学习。本文完整代码可以主页发送‘2048’获取。

标签:Bold,newArr,2048,NEXT,rgb,小游戏,let,fontSize,249
From: https://www.cnblogs.com/youlanjihua/p/18537968

相关文章

  • 鸿蒙NEXT开发案例:转盘1W
    【1】引言(完整代码在最后面)在鸿蒙NEXT系统中,开发一个有趣且实用的转盘应用不仅可以提升用户体验,还能展示鸿蒙系统的强大功能。本文将详细介绍如何使用鸿蒙NEXT系统开发一个转盘应用,涵盖从组件定义到用户交互的完整过程。【2】环境准备电脑系统:windows10开发工具:DevEcoStudi......
  • HarmonyOS Next加密安全的双剑合璧:Device Certificate Kit与Crypto Architecture Kit
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在华为鸿蒙HarmonyOS的安全世界里,Device......
  • 鸿蒙NEXT开发案例:转盘
     【1】引言(完整代码在最后面)在鸿蒙NEXT系统中,开发一个有趣且实用的转盘应用不仅可以提升用户体验,还能展示鸿蒙系统的强大功能。本文将详细介绍如何使用鸿蒙NEXT系统开发一个转盘应用,涵盖从组件定义到用户交互的完整过程。【2】环境准备电脑系统:windows10开发工具:DevEcoSt......
  • 鸿蒙next5.0版开发:ArkTS组件点击事件详解
    在HarmonyOS5.0中,ArkTS提供了一套完整的组件和事件处理机制,使得开发者能够创建交互性强的应用程序。本文将详细解读如何使用ArkTS组件处理点击事件,包括事件的注册、回调函数的编写以及事件对象的使用。点击事件基础点击事件是用户与应用交互的基本方式之一。在ArkTS中,点击......
  • HarmonyOS Next中密码类数据保护场景解析
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)在开发多语言电商平台方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在当今数字化......
  • HarmonyOS Next关键资产存储安全保障机制深度剖析
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)在开发多语言电商平台方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。(一)引言在当......
  • HarmonyOS Next中关键资产存储操作实战指南
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)在开发多语言电商平台方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。(一)引言在上......
  • HarmonyOS Next之Asset Store Kit基础功能全解析
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)在开发多语言电商平台方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在HarmonyOS......
  • HarmonyOS Next关键资产存储开发:性能优化与注意事项
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)在开发多语言电商平台方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。(一)引言在前......
  • 【鸿蒙生态崛起,开发者有哪些机遇与挑战?】HarmonyOS NEXT 引领数字化未来
    文章目录前言一、HarmonyOSNEXT特点与升级二、全面突破操作系统核心技术三、鸿蒙生态全面守护用户隐私四、鸿蒙生态的崛起与开发者机遇五、全新鸿蒙生态引领数字化未来小结前言鸿蒙系统不断发展,有与安卓、iOS形成三足鼎立之势,且其在智能手机、智能穿戴、车载、......