写一个猜数字游戏
游戏要求:
- 电脑自动生成1~100的随机数
- 玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束
- 玩完一把,还可以继续玩,不需要重开
1. 随机数生成
srand((unsigned int)time(NULL)); 给int r = rand() ;设置更合理的种子
- unsigned int:返回类型
rand()生成伪随机数。如果不进行特别设置,每次程序运行时,rand()函数生成的随机数序列是固定的。- 程序中在调用 rand 函数之前先调用 srand 函数,通过 srand 函数的参数seed来设置rand函数生成随机数的时候的种子,只要种子在变化,每次生成的随机数序列也就变化起来了。
time(NULL)函数:如果传入的参数是NULL,就表示只获取当前时间,而不存储时间值到指定变量中。time(NULL)返回的是时间戳(从一个特定的时间点到当前时间所经过的秒数)。- 要包含#include <stdlib.h>// 包含标准库,用于随机数生成函数 和#include <time.h>// 包含时间库,用于获取系统时间
真正生成并赋值随机数的是这行代码:
int r = rand() % 100 + 1;
如果要生成a~b的随机数:
a + rand()%(b-a+1)
2封装公式game
void game()
//void 是函数的返回值类型,表示这个函数执行完后不返回任何值
//game 是函数的名称,通常根据函数的功能命名(这里显然是 “游戏” 相关的功能)。
//括号 () 表示这是一个函数,括号内可以放参数(这里为空,说明调用这个函数时不需要传入数据)。
3.实现猜数字
#include <stdio.h>
#include <stdlib.h>// 包含标准库,用于随机数生成函数
#include <time.h>// 包含时间库,用于获取系统时间
void game()
{
int r = rand() % 100 + 1;//生成伪随机数,赋值给r
int guess = 0;
// 无限循环,直到猜对数字才退出
while (1)
{
printf("请猜数字>:");
scanf("%d", &guess);
if (guess < r)
{
printf("猜小了\n");
}
else if (guess > r)
{
printf("猜大了\n");
}
else//我写的是if (guess=0),不太对
{
printf("恭喜你,猜对了\n");
break;
}
}
}
// 游戏菜单函数,用于展示游戏选项
void menu()
{
printf("***********************\n");
printf("****** 1. play ******\n");
printf("****** 0. exit ******\n");
printf("***********************\n");
}
// 主函数,程序入口
int main()
{
// 定义变量用于存储玩家的选择(1或0)
int input = 0;
srand((unsigned int)time(NULL));//时间戳
//rand() 会根据 srand设置的种子,生成一个随机数。
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();//第一个写好的
break;
case 0:
printf("游戏结束\n");
break;
default:
printf("选择错误,重新选择\n");
break;
}
}
while (input);
//do-while循环
//当input是非0,那么继续循环;当input为0时,循环条件不成立,退出循环
//带实际循环体的while循环:不加分号空循环或do-while循环的结尾:必须加分号
return 0;
}

京公网安备 11010502036488号