猜数字游戏

1.游戏介绍

    今日分享猜数字游戏的实现思路,游戏需要满足以下两个要求:1. 电脑自动生成1~100的随机数。2. 玩家在猜数字的过程中,根据猜测数字的大小给出大了或小了的反馈,直到猜对,游戏结束。

2.要求分析

    通过读题目要求,首先电脑要生成随机数,需要想办法生成随机数。其次,根据要求中提到玩家直到猜对,游戏才能结束,并且一般游戏玩完后如果还想玩不用重新启动程序还可以继续玩,需要用循环来解决问题。下面就逐个解决这些问题。

3.解决随机数的生成

    如何生成随机数呢?C语言提供了⼀个函数叫 rand,这个函数是可以生成随机数的,函数原型如下所示:int rand(void)rand函数的使用需要包含一个头文件是:stdlib.h,下面就来使用一下这个函数看看它的效果。

    程序运行一次后发现确实生成了不同的数字,此时关闭程序在运行一次。

    我们发现第二次运行和第一次运行产生的随机数一模一样,只是每一次程序运行时产生的随机数的结果不一样,这是为什么?这里就要深入了解一下rand函数,其实rand函数生成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法生成的随机数。真正的随机数的是无法预测下一个值是多少的。而rand函数是对一个叫“种子”的基准值进行运算生成的随机数。每次运行程序产生的随机数都是一样的,是因为rand函数生成随机数的默认种子是1。因此只要每次运行程序时种子是不一样的,rand函数每次重新运行时就能产生不同的随机值。C语言中又提供了⼀个函数叫 srand,它是用来初始化随机数的生成器的,函数原型如下:void srand(unsigned seed)。程序在调用rand 函数之前先调用一次srand函数,通过 srand 函数的参数seed来设置rand函数生成随机数的时候的种子,只要种子在变化,每次生成的随机数序列也就变化起来了。下面来测试一下。

    程序每一次运行时产生的随机数确实不一样了。那也就是说给srand的参数如果是随机的,rand就能生成随机数;但本来就想生成随机数,结果又需要随机数,这里就比较矛盾。那怎么让种子变化起来呢?在程序中我们⼀般是使用程序运行的时间作为种子,因为时间时时刻在发生变化的。在C语言中有⼀个函数叫 time,time函数的时候需要包含头文件:time.h。原型如下:time_t time(time_t* timer)。此函数返回的是1970年1月1日0时0分0秒到现在程序运行时间之间的差值(时间戳),单位是秒。返回类型time_t可以理解为整形。time函数的参数timer如果是非NULL的指针的话,函数会将这个返回的差值放在timer指向的内存中带回去。如果timer是NULL,就只返回这个时间的差值。我们使用把time写为NULL即可。

此时就完成了随机数的生成。注:srand函数是不需要频繁调用的,一次运行的程序中调用⼀次即可。

4.解决随机数的范围

    游戏要求生成1~100的随机,我们可以这样思考,任意一个数除以100得到的余数的范围是0~99;再加以就可以得到1~100的随机数了。

此时就产生了所需要的范围。

5.循环的运用

    玩家可以根据自己的需要在菜单中进行选择,玩完一局不用退出程序还可以再玩一局。如果玩家不小心选择了菜单中没有的选项可以对玩家提醒。

看看代码效果

符合游戏设想,下面对游戏类容进行实现。

再使用rand时不要忘记调用srand。

现在测试一下结果

这样游戏就成功实现了。

6.游戏小扩展

    前面游戏可以无限次猜测,这样就不会挑战失败。因此可以加上挑战次数,让游戏的难度升级。

代码运行

这样游戏就更丰富了。

7.代码整体展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值