服务器之家:专注于服务器技术及软件下载分享
分类导航

服务器资讯|IT/互联网|云计算|区块链|软件资讯|操作系统|手机数码|百科知识|免费资源|头条新闻|

服务器之家 - 新闻资讯 - 操作系统 - 2048小游戏—鸿蒙Arkts版

2048小游戏—鸿蒙Arkts版

2023-08-08 17:09未知服务器之家 操作系统

想了解更多关于开源的内容,请访问: 本站开源基础软件社区 一、规则讲解 首先我们先介绍一下2048这个游戏的基本规则:一开始方格内会出现2或者4等这两个小数字,玩家只需要上下左右其中一个方向来移动出现的数字,所有的

2048小游戏—鸿蒙Arkts版

想了解更多关于开源的内容,请访问:

本站开源基础软件社区

一、规则讲解

首先我们先介绍一下2048这个游戏的基本规则:一开始方格内会出现2或者4等这两个小数字,玩家只需要上下左右其中一个方向来移动出现的数字,所有的数字就会想滑动的方向靠拢,而滑出的空白方块就会随机出现一个数字,相同的数字相撞时会叠加靠拢,然后一直这样,不断的叠加最终拼凑出2048这个数字就算成功。

如图为游戏的初始界面:

2048小游戏—鸿蒙Arkts版2048小游戏——鸿蒙Arkts版-开源基础软件社区

二、代码讲解

1、项目结构

如图:

2048小游戏—鸿蒙Arkts版2048小游戏——鸿蒙Arkts版-开源基础软件社区

主要包含三个包:model、pages以及util。

  • model包:该包包含应用程序中使用的数据模型,比如说网络请求返回的数据模型、本地存储的数据模型等。这些数据模型用于传递数据,使得应用程序中各个组件之间的数据传递变得更加简单和可靠。
  • pages包:该包包含了应用程序中所有的 Activity、Fragment 等 UI 组件。这些组件被组织成不同的模块(module),每个模块都包含了一组相关的 UI 组件。例如,一个包含登录、注册等页面的模块可以被命名为auth。
  • util包:该包包含了应用程序中常用的工具类和辅助函数。例如,日期时间格式化、网络连接状态检查、字符串处理等。这些工具类和辅助函数可以减少代码的冗余,提高代码的可读性和可维护性。

2、model包

首先我们声明该类为GameController,下面为了方便理解,我将分步给出部分代码并介绍该类的主要方法和属性。

2048小游戏—鸿蒙Arkts版2048小游戏——鸿蒙Arkts版-开源基础软件社区

  • cellArr: number[][]: 一个二维数组,用于存储游戏单元格的数字。每个单元格可以存储一个数字,数字可以是 2 或 4。
  • isGameOver: boolean: 表示游戏是否结束。
  • init(cellArr: number[]): void: 初始化游戏,将一个一维数组转换为二维数组,并生成两个随机数字填充到单元格中。

2048小游戏—鸿蒙Arkts版2048小游戏——鸿蒙Arkts版-开源基础软件社区

  • fillOneEmptyCell(): void: 找到一个空单元格,生成一个随机数字填充到该单元格中。
  • findOneEmptyCell(): number: 找到一个空单元格的索引。
  • getRandomValue(): number: 生成随机数字,90%几率生成2,10%几率生成4。
  • randomVal():生成一个随机整数,范围在0(包括)和max(不包括)之间。

2048小游戏—鸿蒙Arkts版2048小游戏——鸿蒙Arkts版-开源基础软件社区

  • canMove(): boolean: 判断游戏是否可以继续移动,依次检查每个单元格是否为空、是否和右侧单元格相等、是否和下方单元格相等。
  • horizontalMoveCells(toLeft: boolean): void: 将单元格向左或向右移动,移除0并对相邻相同数进行叠加。

2048小游戏—鸿蒙Arkts版2048小游戏——鸿蒙Arkts版-开源基础软件社区

  • verticalMoveCells(toUp: boolean): void: 将单元格向上或向下移动,移除0并对相邻相同数进行叠加。toUp表示是否是向上

2048小游戏—鸿蒙Arkts版2048小游戏——鸿蒙Arkts版-开源基础软件社区

  • removeZerosAndAdd(arr: number[], toHead: boolean): number[]: 压缩数组并对相邻相同的数进行叠加。
去掉数组中的0,向头或向尾压缩数组。
 0,4,0,4向左压缩变成:4,4,0,0. 向右压缩变成:0,0,4,4
相邻的数如果相同,则进行相加运算。
 4,4,0,0向左叠加变成:8,0,0,0. 向右叠加变成:0,0,0,8
 toHead表示是否是头压缩

2048小游戏—鸿蒙Arkts版2048小游戏——鸿蒙Arkts版-开源基础软件社区

  • moveUp(): void: 向上移动单元格。
  • moveDown(): void: 向下移动单元格。
  • moveLeft(): void: 向左移动单元格。
  • moveRight(): void: 向右移动单元格。
  • checkGameOverOrContinue(): void: 检查游戏是否结束,如果可以继续移动,生成一个新数字填充到单元格中,否则标记游戏结束。
  • getFlatCellArr(): number[]: 将二维数组转换为一维数组。

2048小游戏—鸿蒙Arkts版2048小游戏——鸿蒙Arkts版-开源基础软件社区

首先我们定义了一个GameDataSource类,实现了IDataSource接口的方法。该类有一个dataArray属性,用于存储字符串数组类型的数据。constructor方法接收一个参数ele,并通过循环将其内容推入dataArray数组中。totalCount方法返回dataArray数组的长度,即数据总数。getData方法接收一个数字类型的参数index,并返回dataArray数组中索引为index的元素。registerDataChangeListener和unregisterDataChangeListener方法在接口中定义,但在该类中并未实现任何功能。

通过这段代码,我们实现了一个数据源类,可以用于获取、存储和管理数据。如果需要在数据源中添加数据监听器,可以通过实现IDataSource接口来实现该功能。

3、pages包(仅展示部分代码)

2048小游戏—鸿蒙Arkts版2048小游戏——鸿蒙Arkts版-开源基础软件社区

Lblbc组件实现了游戏逻辑和界面渲染。它包含了一个flatCellArr数组,用于存储游戏中的数字方块的值。gameController和colorUtil属性分别是游戏控制器和颜色工具类的实例。

组件中的startGame方法用于初始化游戏,并将flatCellArr数组重置为初始状态。moveUp、moveDown、moveLeft和moveRight方法用于响应用户的滑动手势,移动数字方块。updateCells方法用于更新flatCellArr数组的值,并检查游戏是否结束。

aboutToAppear方法在组件即将出现时调用,并根据屏幕的大小设置游戏界面的大小。build方法用于构建游戏界面,其中使用了Column、Grid、Text等 Ohos.js 组件。

GameOverView组件是一个自定义对话框组件,用于在游戏结束时显示。它包含一个startGame方法和一个build方法,用于重新开始游戏。

4、util包

2048小游戏—鸿蒙Arkts版2048小游戏——鸿蒙Arkts版-开源基础软件社区

这段代码实现了一个ColorUtil类,提供了一个getCellBackgroundColor方法,用于根据数字方块的值返回相应的背景颜色。具体实现是通过一个switch语句,根据不同的数字方块的值返回不同的颜色值。在switch语句中,每个case语句对应一个数字方块的值,返回一个对应的颜色值。如果传入的数字方块的值不在case列表中,default语句会返回一个默认的颜色值。

在游戏界面中,数字方块的背景颜色就是通过调用ColorUtil类的getCellBackgroundColor方法来获取的。根据不同的数字方块的值,游戏界面上的数字方块会显示不同的背景颜色,从而提高了游戏的可玩性和可视化效果。

结尾

我们需要在config.json中进行文件的配置用于描述应用程序的基本信息、模块、设备配置和能力等。它由三个主要部分组成:app、deviceConfig和module。

首先是app部分,用于定义应用程序的基本信息,包括bundleName、vendor和version等。其中,bundleName表示应用程序的包名,vendor表示应用程序的开发商,version表示应用程序的版本号,包括code和name两个属性。

然后是deviceConfig部分,用于定义设备的配置信息。

最后是module部分,用于定义应用程序的模块和能力。其中,package表示模块的包名,name表示模块的入口文件,mainAbility表示应用程序的主要入口能力。deviceType表示设备类型,这里是手机。distro表示应用程序的分发信息,包括deliveryWithInstall、moduleName、moduleType和installationFree等属性。abilities表示应用程序的能力列表。js表示应用程序的 JS 配置信息,包括mode、pages、name和window等属性。其中,mode表示页面的模式,这里是ets。pages表示应用程序的页面列表,这里只有一个名为pages/index的页面。name表示页面的名称,这里是.MainAbility。window表示页面的窗口配置,包括designWidth和autoDesignWidth等属性。

最终的运行结果如图所示:

2048小游戏—鸿蒙Arkts版2048小游戏——鸿蒙Arkts版-开源基础软件社区

好啦,本期的讲解就此结束,博主第一次写这玩意,希望大家一起努力共同进步。

文章相关附件可以点击下面的原文链接前往下载:

/resource/2901

想了解更多关于开源的内容,请访问:

本站开源基础软件社区

延伸 · 阅读

精彩推荐