详细解析C语言实现猜数字游戏

一、游戏要求:

1、每次游戏自动生成一个1~100之间的随机数;

2、玩家若猜对数字,则结束本次游戏,但不退出程序;若未猜对数字,则提示玩家猜大了或猜小了,直到玩家猜对为止。

3、当玩家玩完一次游戏后可以选择是否继续玩,或选择退出程序。

二、实现过程:

1、游戏框架:

        

解析:

(1)为了实现游戏要求的第三条,游戏框架我们选择do...while循环语句,根据玩家的选择来判断继续游戏还是退出程序。

(2)制作一个简易的游戏菜单,设置1为进行游戏,0为退出程序,因为do...while循环的判断条件是input的值,所以当玩家输入0时,条件为假,循环结束,退出程序。

(3)在do...while语句中嵌入一个switch...case语句,判断条件同样是input的值,根据玩家的选择来执行相应的命令,如果玩家选择的既不是1也不是0,就会执行default语句,提示玩家选择错误,重新选择。

 2、实现游戏

首先,我们要生成一个随机数,这里需要用到生成随机数的函数:rand(),这个函数会随机生成一个0~RAND_MAX(32767)之间的整数。

使用该函数需要引用头文件:<stdlib.h>。

 接下来,我们把生成的随机数打印出来看一下是否真的随机:

 

每次生成的随机数确实挺随机的,但是,如果我们退出程序,再次打印的话,就会发现每次生成的随机数是一样的:

 我们打开MSDN,查看一下rand函数的解释:

在使用rand()函数之前,需要调用srand()函数来设置这个随机数的生成起点:

srand()函数的作用是设置一个随机的起点,参数是无符号整数,那我们就调用一下这个函数:

 

把ret打印出来看一下是否随机:

 

当我们给srand()传参传个1时,每次生成的随机数都是一样的,换个参数是否可行呢? 

换个参数之后发现每次生成的随机数还是一样的,那么我们可以得出这样一个结论:srand()参数需要传一个不断变化的数字,这样生成的随机数才是真正随机的。

什么数字在不断变化呢?没错,就是时间,所以,我们可以把时间戳(时间转化成的一个数字)作为参数,传给srand()函数,此时就需要调用time()函数来获取时间戳:

 我们此时只需要调用time()函数来获取时间戳,传参时传个空指针即可,而time函数的返回类型是

time_t,与srand()函数的参数类型unsigned int不同,所以需要进行强制类型转换,调用time()函数之前需要引用头文件<time.h>。

 再次打印ret,检测生成的随机数是否随机:

每个数字相差很小,随的不是很机。因为我们每次调用srand()函数时,srand()函数每次都会设置一个随机数的生成起点,但是每次设置的起点都很接近,所以我们只需要调用一次srand()函数,设置一次随机的起点就可以了,接下来我们把srand()函数放在循环外面:

 

现在生成的随机数就很随机了,并且每次都不相同。 但是现在生成的随机数在0~32767之间,而游戏要求则是生成1~100之间的数字,只需要给ret%100即可得到0~99的数字,然后+1即可得到1~100之间的数字:

生成随机数的要求已经实现,最后就是实现猜数字过程中的提示了:

一个简单的猜数字游戏就实现了~ 

三、整体思路:

1、使用do...while...循环作为游戏主框架,给到玩游戏和退出程序的两个选项;

2、实现游戏需要生成随机数,调用rand()函数之前调用srand()函数设置随机数起点,调用time函数获取时间戳,将不断变化的时间戳作为参数传给srand()函数,生成的随机数%100之后+1得到1~100之间的随机数;

3、猜数字的提示使用while函数循环,判断条件恒为真,直到玩家猜对数字,猜对数字之后需要break跳出循环。

最后是整个程序的代码:

程序运行结果:

  • 15
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃点橘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值