目录
猜数字游戏具体规则
1.电脑随机生成一个数字(1~100)
2.玩家猜数字
玩家猜小了,就告知猜小了
玩家猜大了,就告知猜大了
3.游戏可以一直玩
猜数字游戏
打印菜单栏
void menu()
{
printf("***************************\n");
printf("********* 1.play **********\n");
printf("********* 0.exit **********\n");
printf("***************************\n");
}
玩家选择1,开始猜数字游戏
玩家选择0,退出猜数字游戏
主函数
这里为了达到游戏重复玩的目的,使用了循环
do..while 循环可以最少执行一次 不错的选择
让我们看看具体是怎么实现的:
int main()
{
int input = 0;
do
{
menu();
printf("请选择选项\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();//猜数字游戏在这里实现
break;
case 0:
printf("退出游戏,886\n");
break;
default:
printf("选择错误 重新选择\n");
break;
}
} while (input);
return 0;
}
编写游戏内函数
进入游戏,我们要猜数字,必须电脑先随机生成一个数字 我们才可以猜数字
C语言提供一个生成随机数的rand函数
Return Value
rand returns a pseudorandom number, as described above. There is no error return.
Remarks
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.
rand函数返回一个随机的整数,
rand 函数返回的随机数的范围是(0~32767)
rand()函数每次调用前都会查询是否调用过srand(seed),是否给seed设定了一个值,如果有 那么它会自动调用srand(seed)一次来初始化它的起始值
srand函数
这个函数需要提供一个种子,一旦种子相同,产生的随机数将是相同的
给srand函数值100 每次值都是一样的
给srand函数值200每次值也还是一样的
本来我们想要生成一个随机数,结果要求我们传过去一个随机数!
void srand (unsigned int seed);
我们常常使用系统时间来初始化,使用time函数来获取系统时间,得到的值是一个时间戳 。
用时间作种子 ,这样每次运行程序的时间肯定是不相同的,产生的随机数肯定也就不一样了。
time的返回类型是time_t 强制类型转化为(unsigned int)的数,再传给srand函数,用法如下:
srand((unsigned int)time(NULL))
这里注意要引用rand、srand函数和time函数的头文件
#include <stdlib.h>
#include <time.h>
随机数生成好了 ,但是生成的数字太大了
我们要求猜1~100之间的数字
int num = rand() % 100 + 1;
//我们给%100,%100取值范围是0~99
//再加1取值范围为1~100
游戏内部函数
根据游戏具体规则,我们可以开始编写一个game函数了
void game()
{
printf("猜数字游戏\n");
int num = rand() % 100 + 1;//生成1~100之间的数字
//num不可以写到循环内部去,不然每次输入完一个数,他的随机值都会改变,这谁能猜对啊!
int guess = 0;
//使用循环重复去猜
while(1)
{
scanf("%d", &guess);
if (guess > num)
{
printf("猜大了\n");
}
else if (guess < num)
{
printf("猜小了\n");
}
else
{
printf("恭喜你!猜对了\n");
break;//猜对了跳出循环
}
}
}
完整代码
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
//猜数字游戏
void menu()
{
printf("***************************\n");
printf("********* 1.play **********\n");
printf("********* 0.exit **********\n");
printf("***************************\n");
}
void game()
{
printf("猜数字游戏\n");
int num = rand() % 100 + 1;
int guess = 0;
while(1)
{
scanf("%d", &guess);
if (guess > num)
{
printf("猜大了\n");
}
else if (guess < num)
{
printf("猜小了\n");
}
else
{
printf("恭喜你!猜对了\n");
break;
}
}
}
int main()
{
//生成随机数种子
srand((unsigned int)time(NULL));
//初始化选项
int input = 0;
do
{
//打印菜单
menu();
printf("请选择选项\n");
//选择菜单选项
scanf("%d", &input);
switch (input)
{
case 1:
game();//猜数字游戏在这里实现
break;
case 0:
printf("退出游戏,886\n");
break;
default:
printf("选择错误 重新选择\n");
break;
}
} while (input);
return 0;
}
感谢大家能看到最后, 如果有不足的地方多多指出,会持续更新的!码字不易,求三连
大家一起加油加油加油!