# define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include <stdlib.h> #include <time.h> void menu() { printf("------------------------------------\n"); printf("------------------------------------\n"); printf("-------1.P L A Y-----------\n"); printf("-------2.E X I T-----------\n"); printf("------------------------------------\n"); printf("------------------------------------\n"); } void game() { int ret = rand() % 100 + 1; int num = 0; while (1) { printf("请猜数字:>"); scanf("%d", &num); if (num == ret) { printf("猜对咯\n"); break; } else if (num > ret) { printf("踏实做人,猜大咯\n"); } else { printf("格局打开,猜小了\n"); } } } int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏\n"); break; default: printf("歪比巴卜?\n"); break; } } while (input); return 0; }
运行结果如下:
优化👏
我们对于猜字游戏可以加上次数限制来增加游戏趣味性,改变我们的函数部分:
void game() { int ret = rand() % 100 + 1; int num ,count= 0; while (1) { if(count<11) { int tag = 10 - count; printf("请猜数字,你还有%d次机会:>",tag); scanf("%d", &num); if (num == ret) { printf("猜对咯,你用了%d次\n",count+1); break; } else if (num > ret) { printf("踏实做人,猜大咯\n"); count++; } else { printf("格局打开,猜小了\n"); count++; } } else { printf("次数用尽,请重来!"); break; } } }
我们把函数部分改成如上,就能成功的将次数 count限制在我们设定范围内,并且还能附上一位计数君🤔。
细节强调👏
rand随机值函数👏
需使用**#include<stdlib.h>**头文件
这里我们说的随机值其实是伪随机值,因为不管怎么说计算机要得到随机值,总得代码给它一个取值的标准,我们这里只是取了一个看似是随机值的变量而已。
这里引入一个随机值函数: int rand(void) 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。RAND_MAX 是一个常量,它的默认值在不同的实现中会有所不同,但是值至少是 32767。
我们如果直接使用rand,会发现只会输出一个特定值,这里又要引入一个srand函数:初始化随机数发生器,其基本格式如下:
void srand((unsigned int seed) time(&t)); rand()
这里的seed(种子)是一个整型值,它初始化随机种子,会提供一个种子,这个种子会对应一个随机数,seed用于伪随机数生成算法播种。上面的猜数字游戏就是把时间戳作为随机数的生成标准。
时间戳👏
这是什么玩意儿呢?
时间戳是指格林威治时间自1970年1月1日(00:00:00 GMT)至当前时间的总秒数。它也被称为Unix时间戳(Unix Timestamp)。通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。
我们在猜数字游戏中用时间戳来给随机值做参照,要使用头文件 #include<time.h>
我们这里取空值 time(NULL)来设置随机数标准,他的用法还有很多很复杂,具体情况我们日后再作分析。