• Home
Name Date Size #Lines LOC

..--

AppScope/06-May-2025-3532

entry/06-May-2025-1,3431,175

hvigor/06-May-2025-2422

screenshots/device/06-May-2025-

.gitignoreD06-May-2025119 1111

README_zh.mdD06-May-20253.7 KiB7754

build-profile.json5D06-May-20251 KiB4241

hvigorfile.tsD06-May-2025159 21

hvigorwD06-May-20252.1 KiB6228

hvigorw.batD06-May-20252 KiB7356

oh-package.json5D06-May-2025840 2826

ohosTest.mdD06-May-2025397 97

README_zh.md

1# 游戏2048
2
3### 介绍
4
5本示例使用Grid组件,实现了2048小游戏功能。
6
7需要系统存储信息,运用了用户首选项接口[ohos.data.preferences](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkdata/js-apis-data-preferences.md) ,
8
9屏幕属性接口[@ohos.display](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/js-apis-display.md)10
11
12### 效果预览
13
14|首页|游戏中|游戏结束|
15|-------|-------|-------|
16|![](screenshots/device/game_init.png)|![](screenshots/device/game_running.png)|![](screenshots/device/game_over.png)|
17
18使用说明
19
201.每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方随机出现一个数字方块, 相同数字的方块在靠拢、相撞时会相加。
21
222.当所有数字方块都无法有效滑动时,游戏结束。
23
24### 工程目录
25```
26entry/src/main/ets/
27|---muck
28|   |---GameData.ets                        //  mock游戏数据
29|---pages
30|   |---index.ets                           // 首页
31|---model
32|   |---GameRule.ets                        // 2048游戏的规则逻辑
33|   |---GameModuel.ets                      // 游戏模型定义
34|---resources/base                          // 存放游戏资源
35|   |---element
36|   |---media
37```
38
39### 具体实现
40* 界面编写步骤
41  1、使用Grid编写网格界面,并在下方编写start按钮触发gameStart()函数生成gridItem所需数据,并且将游戏状态修改为游戏中,触发游戏规则Init()初始化游戏规则。
42  2、循环渲染gridItem,去生成网格数据,MyGridItem会根据每一个数据渲染每一个网格的数字颜色(<=4?黑:白)和背景色(通过自然对数计算出颜色数组中的当前索引)。
43  3、grid通过gesture()去绑定一组手势up,down,left,right函数, [源码参考](entry/src/main/ets/pages/Index.ets )。
44* 游戏规则编写
45  1、init()函数初始化游戏规则,将所有网格数字设置为0,游戏状态为开始,分数为0,并生成网格数字。[源码参考](entry/src/main/ets/model/GameRule.ets )。
46  2、触发up/down函数,网格沿着colnum移动,最多可移动三次(row大小-1次),如果当前网格数字===要移动到的网格上的数字,就将要移动的网格数字 + 当前网格数字,将结果加上旧score赋值给最新的score,
47  如果移动前的总数字不等于移动后的总数字,生成空白网格数字,[源码参考](entry/src/main/ets/model/GameRule.ets )。
48  3、触发left/right函数,网格沿着row移动,最多可移动三次(column大小-1次),如果当前网格数字===要移动到的网格上的数字,就将要移动的网格数字 + 当前网格数字,将结果加上旧score赋值给最新的score,
49  如果移动前的总数字不等于移动后的总数字,生成空白网格数字,[源码参考](entry/src/main/ets/model/GameRule.ets )。
50
51### 相关权限
52
53不涉及。
54
55### 依赖
56
57不涉及。
58
59### 约束与限制
60
611.本示例仅支持在标准系统上运行。
62
632.本示例需要使用DevEco Studio 3.1 Beta2 (Build Version: 3.1.0.400 , built on April 7, 2023)及以上版本才可编译运行。
64
653.本示例已适配API version 9版本SDK,版本号:3.2.11.9。
66
67### 下载
68
69如需单独下载本工程,执行如下命令:
70
71````
72git init
73git config core.sparsecheckout true
74echo code/Solutions/Game/Game2048/ > .git/info/sparse-checkout
75git remote add origin https://gitee.com/openharmony/applications_app_samples.git
76git pull origin master
77````