C语言版---2048小游戏,简单易懂,看过就会

一.废话不多说,直接上代码。

(不懂游戏规则,可以自行查阅^_^)

#include 
#include 
#include 
#include 

#define N 4         //定义阶数
#define up 72       //键盘上键
#define down 80     //键盘下键
#define left 75     //键盘左键
#define right 77    //键盘右键
#define esc 27      //键盘esc键

//产生n个随机数
void Random(int *data, int n)
{
    for(int i = 0; i

游戏截图

C语言版---2048小游戏,简单易懂,看过就会_第1张图片

 

二.代码分析

        相信认真看完我的代码注释的小伙伴,一定感慨,老夫活这么久,查阅代码无数,从未见有如此注释简单,清晰的代码(说笑^_^),之所以写这么详细,是因为查代码的小伙伴很大程度上不会写,或者自己写的时候出bug,不知道哪里错了,想看看人家的,但是网上一找,发现,全部在讲原理,或者代码根本没有什么关键的注释,看完以后,一头雾水。所有博主特意写下这篇博客,来赠予友猿人。

        这里重点介绍一下,合并的方法。可以看到,我的代码非常简洁,把右移,上移和下移操作等全部转化为左移操作了,节省了不少(这里采用了数学的转化与化归思想和空间想象力)。右移,相当于先把游戏界面顺时针旋转180°,然后左移,然后再把游戏界面顺时针旋转180°,还原。上移和下移是同样的逻辑,当然也可以逆时针旋转,这里不展开。

        所以关键步骤变化为,如何左移。首先左移可以分解为两个步骤。第一步,每一行整体左移,遇到空位(这里用数字0表示),直接跳过,直到碰到非零数字,最终结果是,每一行的所有数字都紧紧挨一起,留下几个空位或者这行全空(都是数字0)。第二步,合并左右相同的数字,当合并了一个数字后,要重新整体左移,因为刚才合并时,右边的数字已经没有意义了,需要被下一个数字覆盖,所有要整体左移。循环这步,直到不能合并结束(找不到左右相同的数字)。

        其他的部分,应该都挺好理解的,代码也有注释,这里就不一一讲解了。对了,这里用到了一些特殊函数,system("cls"),用来清屏的,类似Linux下在终端输入clear。还有一个getch(),是用来获取一个字符,并且不回显的(头文件conio.h),当然你回显也没有问题,因为每次移动后都清屏,然后重新显示游戏界面。

三.总结

        本次游戏,在算法方面每怎么优化,小伙伴可以自行尝试一下。好了,本期的小游戏分享就到这里了,以后会不定期更新,更多好玩的,可以在左边的专栏里慢慢玩,毕竟可以白嫖(^_^)。

        

        

你可能感兴趣的