初学C语言设计一个简单的猜数字小游戏

游戏介绍:

                  1.开始游戏后,生成一个1-100的随机数,你需要在1-100之间猜数字。

                  2.每次输入数字,系统会提醒你猜大了还是猜小了。

                  3.重复猜数字的过程,知道猜出正确的数字。

 

程序设计

在设计程序之前,我们要有一个设计思路,这个游戏程序设计流程很简单,1.首先生成一个1-100随机数;2.让玩家去猜数字,可以用scanf函数来读取玩家的输入;3.判断玩家输入的数字与正确答案的关系,是“猜大了”、“猜小了”还是猜对了。       玩家一般不会一次就猜出答案,所以我们要将2和3设置成一个循环。

1.制作菜单

设计小游戏的时候,我们可以先设置一个菜单,玩家可以选择开始游戏或者退出游戏,也可以让玩家在每次玩完一次游戏也可以选择再开一把还是退出游戏。菜单设计很简单,我们可以参考以下代码来设计一个简易的菜单。

d9e1cb3c444f4a109df462daa4d2e7eb.png

在上面这段代码中,我们使用了一个do...while循环来读取玩家的输入,用一个input变量来控制游戏的进行与结束,实现了一个简单的开始游戏和退出游戏的逻辑。当然,在这个阶段,我们还没有去完成游戏的代码,只是打印一个“开始游戏”来代替,因为我们写完这段代码后要先测试这一部分的逻辑是否正确,没有问题的话我们再去编写游戏相关的代码,我们以后编写程序是也需要写完一段代码就测试一次,防止写完所有代码后再测试的时候我们找bug不方便。上述菜单代码的测试如下图:

b5a9439eeb074731ae05768decd09129.png

由此可以看出,我们上述代码是没有问题的,这时候我们就可以开始编写接下来的代码了。

我们要编写一个game()函数来实现猜数字游戏的逻辑,游戏的实现都会存放在game()函数中,避免所有代码都集中在主函数中,导致代码可读性太低。

2.生成随机数

在C语言<stdlib.h>库中,有一个函数rand()专门用来生成随机数,rand()函数不需要参数,会返回一个0~RAND_MAX(32767)的整形。但是当我们直接定义一个整型去接收rand()的返回值时,我们会发现一个问题

 

fbfcf3fa88bc482583de7b3fdae219d9.png

90a310c878f0445d92d9d9a0a041c4e6.png

如上图,我们会发现,每次程序打开程序,我们得到的随机数都是一样的,像是有固定的顺序。这是因为我们没有正确使用rand函数,在使用rand函数之前,我们要使用一个srand()函数来设置随机数生成的起点,srand()函数需要传一个unsigned int类型的参数,于是我们将srand函数加入到代码当中,于是出现了下面这种情况:

ea7e284b43b54b8b8b991db8550aee74.png

我们每次开始游戏后生成的随机数都是同一个,这是因为我们在生成随机数时,每一次开始游戏时都设置了同一个起点,倒是rand()函数生成的随机数都是同一个,而在程序中,我们只需要设置一次随机数起点就够了,于是我们将srand函数放到主函数中。都是因为我们传给srand的参数是1,每次启动程序都是在这个起点上生成随机数,所以这又回到了第一种错误。所以这时候我们会想到传一个随机数给srand函数,这时候就陷入死循环了,我们要用它来产生随机数,可是要正确使用他有需要我们给他传一个随机数。其实我们没有必要传给srand函数随机数,而是传给她一个时刻变化的数就能达到我们的需求。而在C语言中有一个时间戳的概念,时间戳就是我们当前时间相对于计算机起始时间的一个差值,单位是秒,时间戳可以转换成时间,时间也可以转换成时间戳,时间是变化的,所以时间戳也是在不断变化的。而<time.h>库中的time()函数就是用来返回时间戳的函数,time函数的参数是指针,返回的类型是一个time_t类型的数,当我们转到定义去看时我们会发现time_t就是long long的一个重命名,我们可以将其强制转换成unsigned int类型作为srand函数的参数,而在这里,我们可以给time函数传一个空指针。因为在这里,我们只需要time函数返回一个不断在变化的时间戳就行了,并不会真正的使用time函数,于是我们就有了以下代码

4597f200c3a84ff7a7af10193a79a966.png

这一段代码就能够生成随机数,到了这一步就很简单了,我们需要的是1~100的随机数,我们只需要让_rand=rand()%100+1,只有就能得到1~100的随机数了。

3.玩家猜数字与判断

在这一部分代码中,我们要实现两个功能,一是让玩家输入数字,二是判断玩家是否猜对,并打印提示信息。这里我们可以用一个while循环来写,这部分代码其实很简单,代码如下图64a5623baa3c45d993f6d4a40c2dde05.png

我们可以用1来作为循环的条件,然后在猜完数字结束时用break跳出循环。

4.程序设计结果

6d5f9b6860574fd6bf533fb6a343ff9b.png

总结

在这个程序的设计中,其实就只有一个难点,就是如何生成随机数,生成随机数用到了time()函数,srand()函数和rand()函数,这几个函数尤其是time()函数如果想要了解具体的使用方法可以在csdn里面去搜索站内大佬的讲解。这是一个简单的程序设计,对于初学者来说难度也不算太大。

 

  • 33
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值