前言
猜数字基本规则:
计算机给出一随机数,玩家输入猜测的数,程序给出偏大或偏小,玩家根据这一提示修改数字,在一定的次数内猜出数字。
本文代码可以在https://gitee.com/fhvyxyci/guessing-numbers/tree/master/
获得,喜欢的话顺手点个star。
一、随机数原理介绍
c语言<stdio.h>库中提供rand()函数,可以根据种子生成伪随机数。但由于默认的种子始终为1,这会导致每次重启游戏后产生的数字相同。
要解决这个问题,我们可以使用srand函数更改种子以及<time.h>中的time函数提供始终变化的种子。
int a=(unsigned int)time(NULL);
这行代码可以将当前时间的时间戳赋给a变量,而时间戳是一个每时每刻都在变化的数,因此可以保证每次生成的种子都不一样。
(注意:time()返回的类型是time_t类型的,time_t 类型本质上其实就是32位或者64位的整型类型,因此可以将他强制转换为unsigned int 类型)
srand((unsigned int)time(NULL));
这样,就可以保证每次生成的数字的随机性了。
二、限定随机数的大小范围
很显然,在这样的一个游戏中,不对数字范围作出限制是绝对行不通的(rand返回的随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是⼤部分编译器上是32767)
我们可以通过取余的方式来限定随机数的范围
rand() % 100;//余数的范围是0~99
这样,我们就获得了范围在0-99的随机数,而如果你对这个范围不满意,你还可以按照这个公式修改你的随机数范围
如果要生成a~b的随机数
a + rand()%(b-a+1)
游戏开始菜单
关于do while:先进行一次循环体再进行条件的判断,而如果玩家输入的是0,循环停止,游戏退出。
同时为了程序的健壮性,应该考虑玩家输入的不符合条件的情况。
game主函数
思路:
按照这个流程,我们可以做出game函数
在这个game函数的基础之上,我们还可以增加难度,比如限定猜数字的次数。
感谢您的阅读!
本博客源码可以在https://gitee.com/fhvyxyci/guessing-numbers/tree/master/
获得,喜欢的话顺手点个star吧!