找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1982|回复: 0
收起左侧

arduino实现2048小游戏第一版(串口打印版)

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

程序界面

程序界面

硬件连线

硬件连线

arduino_2048.zip

656.98 KB, 下载次数: 2, 下载积分: 黑币 -5

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表