1. 游戏规则
系统随机生成0-100的整数,让玩家来猜。玩家猜数字后,系统给予玩家回馈并且统计玩家猜的次数,直到玩家猜对为止。
2. 思路分析
- 首先编写主函数,在函数内部使用do…while循环构建游戏框架,使玩家可以进行多次游戏。
- 定义一个menu()函数,实现菜单功能。
- 以用户输入的值作为判断条件,来决定猜数字游戏是否要运行,可以用switch语句进行判断。
- 定义一个game()函数,来实现游戏功能。
- 系统需要随机生成0-100的整数,可以考虑rand()函数来实现。
- 玩家输入一个值,并用if判断语句对用户输入的值与随机生成的值进行相比较,给用户比较结果的提示。
- 玩家猜对时,会跳出循环,返回到原先程序的一个入口,再给用户一个选择是否进行游戏的选择,从而达到一个可以继续循环游戏的效果。反之,玩家继续输入一个数,再进行判断。
3. 代码实现
3.1 构建主函数
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("退出游戏");
break;
default:
printf("输入错误请重新输入");
break;
}
} while (input);
return 0;
}
3.2 构建menu()函数
void menu()
{
printf("******************\n");
printf("******1.play******\n");
printf("******0.exit******\n");
}
3.3 构建game()函数
void game()
{
int i = 0;//计数,初始为0
int guess = 0;
int ret = rand()%100+1;//随机生成0-100之间的整数
printf("请猜数字:>");
while (1)
{
do{
scanf("%d", &guess);//用户猜数字
i++;
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了!");
}//根据对比结果,提示用户猜低了、高了还是对了
} while (guess != ret);
printf("一共猜了%d次\n",i);
break;//一旦用户猜对,跳出while循环
}
}
有时程序需要一个规定范围内的随机数。要将随机数的范围限制在 1 和某个最大值 max 之间的整数,可以使用以下公式:number = rand() % max + 1。
另外,在调用rand()函数时,多次运行程序产生的随机数是不变的,因此需要先在main函数中加入以下这段代码:
srand((unsigned int)time(NULL));//随机数发生器初始化
事实上,rand() 函数产生的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”。种子和随机数之间的关系是一种正态分布:
种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的。
为了解决这个问题,我们可以使用时间戳来生成随机数,通过 srand() 函数来重新“播种”,这样种子就会发生改变。
4. 代码汇总
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("******************\n");
printf("******1.play******\n");
printf("******0.exit******\n");
}
void game()
{
int i = 0;
int guess = 0;
int ret = rand()%100+1;
printf("请猜数字:>");
while (1)
{
do{
scanf("%d", &guess);
i++;
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了!");
}
} while (guess != ret);
printf("一共猜了%d次\n",i);
break;
}
}
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("退出游戏");
break;
default:
printf("输入错误请重新输入");
break;
}
} while (input);
return 0;
}
5. 程序运行结果
欢迎大家在评论区交流学习,更多代码资料见GitHub:C-language