一、游戏要求
- 电脑自动生成1~100的随机数
- 玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束。
二、随机数生成
我们首先需要生成一个随机数,可以考虑通过rand函数来实现:
num = rand() % 100 + 1
但是当我们写完代码调试试玩会发现每次的随机数都是相同的,因为rand函数生成的是伪随机数,并不能达到游戏效果,所以我们要在之前加入如下代码:
srand((unsigned)time(NULL));//随机数发生器初始化
注:
- 使用rand函数需要包含头文件
#include <stdlib.h>
- 程序在调用rand函数之前先调用srand函数,所以我们要使srand函数的参数变化,这时就用上了time函数
- 使用time函数需要包含头文件
#include <time.h>
- time参数会返回当前日历的时间,函数原型为
time_t time(time_t* timer);
- 但因为time函数的返回值和srand参数类型不一样,所以要进行强制类型转换,将time_t变成unsigned
三、设置随机数的范围
如果我们要生成0~99之间的随机数,方法如下:
rand() % 100;//余数的范围是0~99
如果我们要生成1~100之间的随机数,方法如下:
rand() % 100+1;//%100的余数是0~99,0~99的数字+1,范围是1~100
如果我们要生成100~200之间的随机数,方法如下:
100 + rand()%(200-1+100)
//余数的范围是0~100,加100后就是100~200
所以如果要生成a~b的随机数,方法如下:
a+rand()%(b-a+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()//游戏实现
{
int guess = 0;
int count = 5;
//还可以加上猜数字的次数限制,如果5次猜不出来,就算失败
srand((unsigned int)time(NULL));
int r = rand() % 100 + 1;
//printf("%d\n", r);
while (count)
{
printf("你还有%d次机会\n", count);
printf("请猜数字:>");
scanf("%d", &guess);
if (guess > r)
{
printf("猜大了\n");
}
else if (guess < r)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
count--;
}
if (count == 0)
{
printf("你失败了,正确的值是:%d\n",r);
}
}
int main()
{
int input = 0;
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;
}