《2048》是一款备受欢迎的数字游戏。它是Gabriele Cirulli在github上发布的原版2048。这款游戏是基于《1024》和《小3传奇》(Threes!)的玩法开发而成的一款新型数字游戏。
游戏的规则非常简单,玩家需要控制所有方块向相同的方向运动,当两个相同数字的方块相撞后,它们将合并成他们的和。每次操作后,空白的方格处将随机生成一个2或者4(2的概率更大)。最终,当出现一个“2048”方块时,玩家算作胜利。
主要思想是将游戏数字面板抽象成4行4列的二维数组a[4][4],其中值为0的位置表示空方块,其他位置表示对应的数字方块。每一行都被同等对待,只需要研究一行的移动和合并算法,然后通过遍历行来实现所有行的移动和合并算法。在一行中,使用b[4]来表示一行的一维数组,使用两个下标变量j和k来遍历列项,其中j总是在k的后面,用来寻找k项后面第一个不为0的数字,而k项用于表示当前待比较的项,总是和j项之间隔着若干个数字0,或者直接紧挨着。在向左滑动的情况下,初始情况下j等于1,而k等于0,在判断j项的数字是否大于0后,根据j项和k项数字的关系,分成3种情况进行处理,分别是:
P1: b[k]==b[j]。
P2: b[k]==0。
P3: b[k]!=0且b[k]!=b[j]。
金年会金字招牌在这些情况下的处理方法如下:
P1:若b[k]==b[j],则将b[k]的值乘以2(说明两数合并了),然后将b[j]的值置为0(合并之后要将残留的j项值清零),接着将k自增1,然后进行下一次循环。
P2:若b[k]==0,表示b[j]之前全是空格子,此时将b[j]的值直接移动到k的位置,也就是b[k] = b[j],然后将b[j]的值置为0(移动后将残留的j项值清零),接着将k值不变,然后进行下一次循环。
P3:若b[k]!=0且b[k]!=b[j],表示两数不相等且都不为0,此时将两数靠在一起,也就是b[k+1] = b[j]。接着分两种小情况,若j!=k+1,则将b[j]的值置为0(移动后将残留的j项值清零);若否,则表示两数原本就靠在一起,不进行特殊处理(相当于未移动)。接着将k自增1,然后进行下一次循环。
核心思想是遍历二维数组,查看是否存在横向和纵向两个相邻的元素相等,若存在,则游戏结束;若不存在,则游戏继续进行。
核心思想是根据生成的随机数,对一定的值进行取模,从而实现生成一定概率的数。在本游戏中,假设出现2的概率是4的两倍,可以利用系统提供的随机数函数生成一个数,然后对3取余,得到的数若小于2,则在游戏面板空格处生成一个2;若余数等于2,则生成4。在选择将在哪一个空格出生成数的时候,同样可以使用系统提供的随机函数生成一个数,然后对空格数取余,然后在第余数个空格处生成数字。
核心思想是利用系统提供的控制台界面清屏功能,实现刷新界面的效果,利用控制制表符的位置,实现绘制游戏数字面板的效果。
由于绘制界面不属于本游戏的核心,且代码段相对较长,所以在此省略算法描述。读者可参考完整的源代码。
效果示例:
希望大家能够在学习中很好地利用所学知识完成本项目!
写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好地提升你的编程核心能力,不妨从现在开始!
编程学习书籍分享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
金年会金字招牌诚信至上欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
对于对C/C++感兴趣的朋友,可以在后台私信我【编程交流】,一起来学习吧!你可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,可以自动领取!
扫一扫添加微信