猜数字游戏的基本流程:
1.系统随机产生0~100的随机整数,然后我们来猜是哪个数字
2.如果猜错了,会提示是猜大了还是猜小了
3.猜完一轮后,如果没玩过瘾,可以选择是否继续进行下一轮
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void manu()//打印菜单
{
printf("*****************************\n");
printf("******** 1.play ***********\n");
printf("******** 2.exit ***********\n");
printf("*****************************\n");
}
void game()//游戏
{
/*首先是要知道如何产生随机的数字,需要用到三种函数。rand函数,srand函数,
time函数。这些函数需要头文件。
rand函数产生的是伪随机数,rand函数是对一个叫“种子”的基准值进行运算生成的
随机数,默认的种子是 1。只要改变种子,就可以产生真正的随机数。
这时候就需要引入srand函数,srand是用来初始化随机数的生成器的。其原型为:
void srand(unsigned int seed);要改变seed就需要引入time函数。
time函数的基本形式为:time_t time(time_t* timer);time函数会返回当前的
日历时间,其实返回的是1970年1月1日0时9分0秒到现在程序运行时间之间的差值。返回
的类型是time_t,其本质上其实是32位或者64位的整型类型。如果timer是NULL(NULL是
空指针的意思,本质是0),就只会返回这个时间的差值。
time函数返回的这个时间差也叫做:时间戳。*/
int r = 0;
r = rand() % 101;//产生随机数,接下来的程序进行猜想
while (1)
{
int guess = 0;
scanf("%d", &guess);
if (r < guess)
printf("猜大了,请重新选择\n");
else if (r > guess)
printf("猜小了,请重新选择\n");
else
{
printf("猜对了,随机数为%d\n", guess);
break;//若猜对了,跳出循环
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//生成随机数之前需要调用srand来设置随机数的生成起点,srand只需要调用一次就可以了。
do
{
manu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
{
printf("游戏开始,请猜数字:>");
game();//玩游戏的函数
break;//玩完一把后,再重新选择是否继续游戏
}
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新选择\n");
break;
}
} while (input);//如果输入0,则代表整个游戏结束
return 0;
}
第二种游戏规则,就是有次数限制,超过这几次,则游戏失败。
代码如下:需要引入一个变量,count
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void manu()//打印菜单
{
printf("*****************************\n");
printf("******** 1.play ***********\n");
printf("******** 2.exit ***********\n");
printf("*****************************\n");
}
void game()//游戏
{
/*首先是要知道如何产生随机的数字,需要用到三种函数。rand函数,srand函数,time函数。这些函数需要头文件。
rand函数产生的是伪随机数,rand函数是对一个叫“种子”的基准值进行运算生成的随机数,默认的种子是 1。只要改变种子,就可以产生真正的随机数。
这时候就需要引入srand函数,srand是用来初始化随机数的生成器的。其原型为: void srand(unsigned int seed);要改变seed就需要引入time函数。
time函数的基本形式为:time_t time(time_t* timer);time函数会返回当前的日历时间,其实返回的是1970年1月1日0时9分0秒到现在程序运行时间之间的
差值。返回的类型是time_t,其本质上其实是32位或者64位的整型类型。如果timer是NULL(NULL是空指针的意思,本质是0),就只会返回这个时间的差值。
time函数返回的这个时间差也叫做:时间戳。*/
int r = 0;
r = rand() % 101;//产生随机数,接下来的程序进行猜想
int count = 5;
while (count)
{
int guess = 0;
scanf("%d", &guess);
if (r < guess)
{
printf("猜大了,请重新选择,你还有%d次机会\n",count-1);
count--;
}
else if (r > guess)
{
printf("猜小了,请重新选择,你还有%d次机会\n",count-1);
count--;
}
else
{
printf("猜对了,随机数为%d\n", guess);
break;//若猜对了,跳出循环
}
}
if (count == 0)
printf("机会用完,游戏失败\n");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//生成随机数之前需要调用srand来设置随机数的生成起点,srand只需要调用一次就可以了。
do
{
manu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
{
printf("游戏开始,请猜数字:>");
game();//玩游戏的函数
break;//玩完一把后,再重新选择是否继续游戏
}
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新选择\n");
break;
}
} while (input);//如果输入0,则代表整个游戏结束
return 0;
}
补充解析:
因为要产生0~100的随机数,而rand产生的随机数是0~32767,所以要%101,取余数,余数就是0~100之间。