|
目的:最近由于某些需要,开始全身心系统学习C\C++,为了学以致用,同时增加学习乐趣,想写一下小游戏练练手,因为手边有一个arduino,就用了arduino作为载体,前期第一版先把游戏逻辑完成,游戏页面使用串口打印显示,第二版打算写一个OLED驱动程序,在实现屏幕版的2048小游戏。
软件环境:
Clion + PlatformIO插件, MacOS系统,PlatformIO Core软件。
游戏规则分析:
2048小游戏,相信大家都比较了解它的玩法,其实游戏很简单,游戏页面可以是4x4的网格,也可是6x6,操作分为向上向下,向左向右。以向上为例,同一列的数据,数据会向上移动,碰到相同的数值则相加。其他操作类似,只是移动方向不一样。
游戏进行的流程分析:
- 捕获输入操作的类型,arduino用四个按键实现输入
- 计算网格矩阵,这是整个游戏的核心
- 打印矩阵
矩阵计算分析:
总共有四种触发情况:上下左右。上下是对列数据进行操作,左右是对行数据进行操作。
以4x4网格为例,一列共有4个数据,假设操作向上,首先将将不为0的数值移动到最上端,判断该列数据是否有相邻且相等但不为0的数值,如果没有,则判断下一列,如果有,则两个数相加,并重新赋值,移动其他数值;继续操作该列,直到没有相邻且相等但不为0的数值。
核心代码:
- //相同且相邻
- int num;
- while ((num = hasEqual(temp, k))) {
- //相加
- for (int l = 0; l < k - 1; ++l) {
- if(num == temp[l] && num == temp[l+1]) {
- temp[l] = num * 2;
- //后面的前移一位
- for (int j = l + 1; j < k - 1; ++j) {
- temp[j] = temp[j+1];
- }
- temp[k - 1] = 0;
- k--;
- break;
- }
- }
- }
复制代码 硬件连线图:
如附件所示,连线挺简单的,我就不多说了。
程序界面:
如附件所示。
|
评分
-
查看全部评分
|