我是靠谱客的博主 傲娇母鸡,这篇文章主要介绍STM32实现2048小游戏,现在分享给大家,希望可以做个参考。

一. 前言

在我们的DIY套件上,终于集成了第三个小游戏----2048。怎么感觉做成了个游戏机呢(#.#)。
这款游戏也是非常流行的,玩起来也是非常的轻松,要想过关的话,还是需要一点的技巧。
欢迎关注 微信公众号 FPGA之旅 回复 stm32实现2048 获取文件

链接:
演示视频

二. 游戏规则简介

  1. 游戏地图为 4 * 4。
  2. 每次移动所以方块都会向指定的方向移动,同时会在地图上随机生成值为2或者4的方块。
  3. 在移动的过程中,如果相邻的两个方块的值一样,那么它们就会融合成一个值为它们之合的方块,每一次移动,只能进行一次融合。
  4. 如果方块中的值为2048,则游戏胜利。如果整个地图都被方块添满了,则游戏失败。

三. 核心代码介绍

方块的随机生成,和胜利的判断的实现都较为容易。整个游戏的核心部分为第三点,方块的移动和融合,这个部分如果弄懂了的话,整个游戏实现起来会非常容易。
先在Visual Studio实现这一过程的准确性,然后在搬运到keil中去,这一方便debug发现问题。

这里先合并,后移动

  1. 通过定义一个长度为4的数组,来模拟一行数据。
复制代码
1
2
int Map[4] = { 0,8,0,8 };
  1. 通过循环来找到可以合并的两个数,将其合并
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
for (j = i + 1; j < 4; j++) { //如果不为0,且当前选择的值也不为0,且和这个数不相等,则跳过 if (Map[j] != Map[i] && Map[j] != 0) break; //如果有相等的两个方块,且中没有其余方块,进行融合 if (Map[j] == Map[i]) { Map[j] = 0; //先将这方块消除掉 unsigned char k; for (k = i + 1; k < 3; k++) { Map[k] = Map[k + 1]; //移动一次方块 } Map[i] += Map[i];//更新融合后的方块的值 Map[3] = 0; flag = 1; break; } }
  1. 移动所有方块,直到所有方块都靠在一起
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
while (1) { int j, flag = 0; for (i = 0; i < 3; i++) { if (Map[i] == 0) //有空的方块,说明可以移动 { Map[i] = Map[i + 1]; Map[i + 1] = 0; } } for (j = 0; j < 3; j++) { if (Map[j] == 0) { int k; for (k = j + 1; k < 4; k++) { if (Map[k] != 0) //判断是否继续移动 { flag = 1; break; } } } } if (flag == 0) break; }
  1. 测试结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整测试代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
int main(void) { int Map[4] = { 0,2,4,8}; int i,flag = 0; int flags = 0; for (i = 0; i < 4; i++) printf("%dt", Map[i]); printf("n"); for (i = 0; i < 3; i++) { unsigned char j; for (j = i + 1; j < 4; j++) { //如果不为0,且当前选择的值也不为0,且和这个数不相等,则跳过 if (Map[j] != Map[i] && Map[j] != 0) break; //如果有相等的两个方块,且中没有其余方块 if (Map[j] == Map[i]) { Map[j] = 0; unsigned char k; for (k = i + 1; k < 3; k++) { Map[k] = Map[k + 1]; } Map[i] += Map[i]; Map[3] = 0; flags = 1; break; } } while (1) { int j, flag = 0; for (i = 0; i < 3; i++) { if (Map[i] == 0) { Map[i] = Map[i + 1]; Map[i + 1] = 0; } } for (j = 0; j < 3; j++) { if (Map[j] == 0) { int k; for (k = j + 1; k < 4; k++) { if (Map[k] != 0) { flag = 1; break; } } } } if (flag == 0) break; } for (i = 0; i < 4; i++) printf("%dt", Map[i]); printf("n"); } return flags; }

最后

以上就是傲娇母鸡最近收集整理的关于STM32实现2048小游戏的全部内容,更多相关STM32实现2048小游戏内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部