1. 游戏说明
电脑会随机生成一个1~100的数字。
猜数字
(1)猜大了,提醒猜大了,继续猜。
(2)猜小了,提醒猜小了,继续猜。
(3)猜对了。显示“恭喜你,猜对了”,结束游戏
(4)玩完一把不过瘾可以继续玩,不用退出程序。
2. 设计思路
通过调用随机数函数rand()产生随机数,在调用rand()时需要配合使用srand()和time()。
使用rand()%100能产生0~99的随机数,再+1(即rand()%100+1)就能让电脑产生1~100的数字。
通过scanf()函数输入数字猜测,再if语句判断猜的数字和电脑生成数字的大小进行相关提示。
所以最外面要有一个循环结构,这里我使用了while(1)死循环,当猜对时使用break跳出终止循环,否则继续猜直到猜对。
3. 相关函数
3.1 rand()函数
函数原型:
C语言中的rand()函数会返回一个范围在0~RAND_MAX(至少是32767)的伪随机整数。
每次调用rand函数,它会生成一个新的随机数,并更新内部状态,以供下一次调用时使用。由于rand函数是伪随机数生成器,所以在每次程序运行时,如果不设置种子值,将会生成相同的随机数序列。
为了生成不同的随机数序列,在调用rand()函数产生随机数前,我们要先调用srand()函数设置随机数种子(seed)。 如果没有设置随机数种子, rand()在调用时会自动设随机数种子为1。随机数种子相同,每次产生的随机数也会相同。
rand()函数包含在stdlib.h头文件中。
3.2 srand()函数
函数原型:
C语言中的srand()函数用于初始化随机数生成器。它是伪随机数生成器,每次程序运行时都会生成相同的随机数序列。为了在每次运行时得到不同的随机数序列,需要使用与时间相关的种子值作为参数调用srand函数。
其中,seed是一个无符号整数,通常可以使用time函数获取当前系统时间作为种子值。
通过调用srand函数,可以设置随机数生成器的种子值,然后使用rand函数生成随机数。
需要注意的是,每次程序运行时,需要调用srand函数设置不同的种子值,以确保生成不同的随机数序列。否则,每次运行将会得到相同的随机数。
srand()函数也包含在stdlib.h头文件中。
3.3 time()函数
函数原型:
time()函数功能是获取当前时间,并将其转换为time_t(时间戳)类型的值。
其中,timet *time 是一个指向time t 类型变量的指针,用于存储获取到的时间值。通常情况下,可以传入NULL,表示不需要返回时间值,只获取当前系统时间即可。
如果要获取当前时间的值,可以传入一个time_t类型的变量的地址,time函数将会将当前时间值存储到该变量中。返回值是一个time_t类型的值,表示当前系统时间的秒数。
4. 游戏实现
需要包含的头文件:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>;
4.1 打印菜单menu()函数
void menu()
{
printf("**********************\n");
printf("***** 1.play ******\n");
printf("***** 0.exit ******\n");
printf("**********************\n");
}
4.2 游戏game()函数
void game()
{
//1. 生成随机数
int ret = rand() % 100 + 1; //获得1~100的随机数
//rand()可以生成随机数,随机数的范围是0~32767
//2. 猜数字
int guess = 0;
while(1)
{
printf("请猜数字:>");
scanf("%d", &guess);
if (guess > ret)
printf("猜大了\n");
else if (guess < ret)
printf("猜小了\n");
else
{
printf("恭喜你,猜对了!\n");
break;
}
}
}
4.3 主函数main()函数
int main()
{
//打印菜单
//1. 玩游戏
//0. 退出游戏
int input = 0;
srand((unsigned int)time(NULL)); //要给srand传递一个变化的值,计算机上的时间是时刻变化的
do //time函数可以返回一个时间戳
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新选择!\n");
break;
}
} while (input);
return 0;
}
5. 完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>;
void menu()
{
printf("**********************\n");
printf("***** 1.play ******\n");
printf("***** 0.exit ******\n");
printf("**********************\n");
}
void game()
{
//1. 生成随机数
int ret = rand() % 100 + 1; //获得1~100的随机数
//rand()可以生成随机数,随机数的范围是0~32767
//2. 猜数字
int guess = 0;
while(1)
{
printf("请猜数字:>");
scanf("%d", &guess);
if (guess > ret)
printf("猜大了\n");
else if (guess < ret)
printf("猜小了\n");
else
{
printf("恭喜你,猜对了!\n");
break;
}
}
}
int main()
{
//打印菜单
//1. 玩游戏
//0. 退出游戏
int input = 0;
srand((unsigned int)time(NULL)); //要给srand传递一个变化的值,计算机上的时间是时刻变化的
do //time函数可以返回一个时间戳
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新选择!\n");
break;
}
} while (input);
return 0;
}
6. 总结
到这里,我们的猜数字小游戏的设计就结束了。这里主要还是学习了随机数函数的使用。
希望通过后续学习,不断提高代码能力和分析解决问题的能力。由于本人是大一学生,知识水平有限,本文如果有错误和不足之处,还望各位大佬多多指出并提出建议!