【c语言】写出第一个游戏(猜数字)

【【c语言】写出第一个游戏(猜数字)】先给出我的思维导图:
【c语言】写出第一个游戏(猜数字)
文章图片

猜数字的基本要求有四个:
1.有菜单供玩家选择
2.有一百个数字,并且系统会随机给出一个数字让玩家猜。
3.猜错时,系统会给出时猜大还是猜
4.游戏能重复玩耍
写代码的流程及问题的解决
1.创建一个菜单: 建立菜单首先我们考虑使用函数menu。菜单建立如下:

void menu() { printf("***********************"); printf("*****1.paly********"); printf("*****0.exit********"); printf("***********************"); }

其次,我们要考虑到玩家输入不同数字时产生不同的效果,所以我们使用switch分支(switch与ifelse的区别看我的文章)。
然后,为了让玩家能重复玩,且至少玩一次,我们可以考虑用dowhile循环(循环的区别看我的文章)。
具体效果如下:
do { menu(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("正在退出"); break; default: printf("请重新输入"); break; } } while (input);

2.有一百个数字,并且系统会随机给出一个数字让玩家猜: 如果要让系统能创造一个随机数,就必须能让系统随时变化,这里我们可以采用时间戳。
首先我们得使用rand函数,这个函数的作用就是产生随机数,但它有个弊端,它产生随机数的依据是在数据库0~RAND_MAX(32767)这里取值。可是当数据库的起点和终点都一样时,系统每次产生的随机数就都相同了。
所以为了改变数据库的起点或终点,我们采用srand函数
srand用法::它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如:srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复,常常使用系统时间来初始化,即使用time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned)time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned)time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。(转载自CSDN博主「天糊土」的原创文章)
可即使采用了srand((unsigned)time(NULL)) 仍然可能出问题,也就是这个函数放哪里。
为了增加数字的随机性,我们要把数据库的起点也就是srand((unsigned)time(NULL)) 既要放在rand前,但又不能放在游戏循环内。这样既能防止数字出现规律,又能使数字随机。
3.猜错时,系统会给出猜大了还是猜小了 既然出现了条件分支,那么就要考虑使用if语句了。这里直接给出实例:
while (1) { printf("请猜数字\n"); scanf("%d", &guess); if (guessret) { printf("猜大了\n"); } else { printf("猜对了\n"); break; } }

接下来只要补充细节,便可完成这个小游戏了。

    推荐阅读