亚美am8登录

联系我们CONTACT

某某工业机械有限公司

地 址:
电 话:020-6668888
传 真:020-6669999
邮 箱:admin@baidu.com
联系人:陈先生
手 机:135695696590
网 址:www.baidu.com

您当前的位置: > 亚美am8登录 > 亚美am8登录

C语言实现简易2048小游戏

上传时间:2020-05-23阅读次数:编辑:admin

  一直很喜欢玩这个小游戏,简单的游戏中包含运气与思考与策略,喜欢这种简约又不失内涵的游戏风格。于是萌生了用C语言实现一下的想法。

  博主分析的都很到位,很多算法技巧都值得借鉴,C语言实现2048的主要思想已经在那个博客中详细的分析了,但是我觉得在博主的代码中还是有很多很好的思想是值得我借鉴学习的。

  用法是:程序员需要为这个函数提供一个随机数的种子:srand(随机数),如果使用相同的种子,那么后面的rand()函数就会每次运行都是生成一样的随机数,即伪随机数。

  为了生成真正的随机数,我们一般采用系统时间来作为随机数初始化函数的种子。使用time()函数来获取系统时间:

  还有一个经常用法,不需要定义 time_t 型 t 变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的 t 数据。

  就是在格子中没有数字时并且在刚刚生成的随机数的位置处,填入一个数字2或者4,并且为了降低难度,固定生成2是生成4的概率的2倍。

  rand()随机数对3取余只有可能是0/1/2,而在三目运算符中,当第一个数不为0时,运算符的值就取中间那个数的值,否则取最后一个数。所以取2的可能性为2/3,取4的可能性为1/3,这样就产生了不同的概率。但是这种方法只能产生 n:1的概率分布,如果要产生 4:5, 8:17 的概率时,这种方法就不在适用了。

  上面这些代码还是有一些漏洞的,因为游戏刚开始是需要有两个数的,一个数必为2,另一个数就是上面生成的那个数,但是如果第二个数恰好生成的随机位置处是第一个数,那么根据这儿代码,就什么也没有执行,最终导致出现刚开始界面就一个数字的情况。

  解决办法就是在刚开始生成的两个数的程序中不使用get_null_count(),而是获取第一个数字2的准确位置,然后生成第二个数字时,在排除第一个数字的地方生成数字即可。

  程序的主体就是数字的上下左右移动,go_left()和其他三个函数,他们的思想都是相似的,就拿go_left()函数来分析一下:

  如果相邻的数字不一样,简单的说,又分两种情况:数字需要移动和不需要移动。

亚美am8登录 am8亚美app最新版 亚美am8客户端

公司地址: 服务电话: #

X请用手机扫描微信二维码