概述
一、游戏要求:
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跳出循环。
最后是整个程序的代码:
程序运行结果:
最后
以上就是紧张翅膀为你收集整理的详细解析C语言实现猜数字游戏一、游戏要求:二、实现过程:三、整体思路:的全部内容,希望文章能够帮你解决详细解析C语言实现猜数字游戏一、游戏要求:二、实现过程:三、整体思路:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复