游戏2048(C++版)

最近上课刚好讲完数组和函数这里,文章也依旧没有灵感不知道该写些什么东西,突然想到和数组知识点关联性比较强的小游戏2048,干脆和大家分享一下我的思路吧,大家也可以自己尝试一下。


一、游戏规则

游戏共有4行4列16个格子,初始时随机两个位置上的数字由2或者4构成。

方向键点击,所有格子会向对应按键方向运动。这里我们先假设输入w,s,a,d几个字符代表上下左右。

相邻的两个格子,在数字相同时会相加。


每次滑动时,空白处会随机刷新出两个数字的格子,这个数字同样是2或4。当界面不可运动时(当界面全部被数字填满时),游戏结束;

游戏2048(C++版)


二、问题分解

那么我们可以根据游戏的规则来确定我们需要什么,该解决那些问题。

1.四行四列的存储数字的格子可以用一个二维数组来表示,空格子可以用0来代替,那么我们可以创建一个初始值都为0的4行4列的二维数组。

2.接下来,这个二维数组会在随机的位置上出现2或者4,这个2或者4必然是出现在等于0的位置上的。这个时候,随机的位置该怎么获得?刚好16个格子,可以先获取1到16之间的随机数,根据这个随机数来确定这个数是第几行第几列,如果此行此列的数刚好等于0,那么我们就把2或者4填上去,否则刚才的操作继续执行,直到找到一个位置等于0。当然,当格子满了的时候,就不需要再找随机数了。

3.能填入随机数后,需要解决的就是朝向某个方向移动时,上下或者左右相邻的数在相等的情况下会相加。那这个时候,我们发现在相加时数字之间的0比较碍事,那么我们可以先把非0的数挪到一起去,然后再把这些相邻相等的数加起来,那这里可以我们可以先分为两部分去解决。

A.非0的数挪到一起。

拿向上举例,某一列的数在不等于0的情况下,就需要判断这个数前是否有0,有的话就往0出现的位置挪,挪完后这个数原本的位置上的数赋值为0。

游戏2048(C++版)


那剩下的向下、向左向右也是类似的操作。

B.相邻的数相等就相加。

相邻的数相等的就相加也是分为四个方向的,同样拿向上举例。相邻的两个数相等的情况下,靠上的数加等于下面的数,下面的数赋值为0,这个时候矩阵中的非零数减一。

游戏2048(C++版)


其它几个方向也是相同的操作。

需要注意的是,相加完之后,这些数之前可能有新的0产生,这个时候再朝某个方向挪动一下。

4.游戏什么时候结束

虽然说游戏设定是获得最大值2048时游戏结束,但我这里没进行最大值的限制,只设定了界面都被填满且相邻数无法相加时游戏结束。那要怎么办呢?

在界面被数字填满的情况下,可以依次获取前三行或者前三列,每一行或每一列和后一行后一列的数进行比较,如果说没有出现相等的数,那这个时候游戏就可以结束了。

5.显示数字在屏幕上。

暂且直接输出在命令行窗口,下次再把这些对应的数字显示在图形窗口上。


三、具体代码实现

游戏2048(C++版)
游戏2048(C++版)
游戏2048(C++版)
游戏2048(C++版)
游戏2048(C++版)
游戏2048(C++版)
游戏2048(C++版)

以上代码除去注释,不到200行,用来练习知识点还是挺不错的。


零基础程序语言入门班

零基础程序语言入门班详情介绍


学员要求

对编程有兴趣,零基础的孩子。


上课时间

每周日下午2-5点


上课地点

福田区百花新天地3楼


师资介绍

何老师,计算机专业硕士保送生,现役ACM-ICPC队员,今年获得ICPC银川站金牌,CCPC银牌,EC铜牌以及邀请赛金牌。何老师不仅参赛成绩斐然,在教学上也有丰富经验,曾担任2019年CSP-S提高组集训班老师,以及数据结构专题班老师,教学细致耐心。


课表详情:

游戏2048(C++版)



详情可扫描二维码联系郑老师咨询了解

游戏2048(C++版)

毕莘教育咨询(深圳)有限公司围绕信息学竞赛普及组、提高组、省赛、国赛进行培训,同时提供与信息学相关的高校自主招生政策咨询。教研团队由国内顶校师资构成,深圳本地教学团队由来自清华、北大等顶尖名校的硕士、博士研究生及NOI、ACM- ICPC退役选手组成。自成立已开展多次培训,服务学生数百人次。

原创文章,作者:深圳信息学_中小学编程_编程培训_信息学竞赛_毕莘教育咨询(深圳)有限公司,如若转载,请注明出处:深圳信息学_中小学编程_编程培训_信息学竞赛_毕莘教育咨询(深圳)有限公司

联系我们

教务老师:余老师
联系电话(微信同号):14774755240
在线咨询:点击QQ在线咨询

QR code