电脑随机生成一个1~100的数字,用户输入数字,猜错10次就启动电脑关机程序60秒内关机,输入我是猪,则停止关机,回到猜数字游戏开始界面;
1.游戏交互界面
(1)游戏菜单
(2)游戏主体
2.猜数字游戏
(1)电脑生成随机数字
(2)玩家输入数字
(3)判断是否猜对
(4)猜错惩罚
void guanji()//关机代码
{
system("color 0a");//代码变色
char intput2[20] = { 0 };
system("shutdown -s -t 60");//系统关机命令,定时60秒
while (1)
{
printf("请注意,你的电脑在60秒内关机,我是猪,就取消关机\n");
scanf("%s", intput2); //strcmp是判断字符串是否相等的函数,如果相等返回值为0
if (strcmp(intput2, "我是猪") == 0)//当strcmp返回值是零的时候说明输入的字符串和目标字符串一样
{
system("shutdown -a");//-a是取消关机
printf("关机取消\n");
break;
}
else
{
printf("你的输入有误,关机程序继续运行\n");
}
}
}
void menu()//游戏交互界面,给用户提供选择
{
printf("************猜数字游戏************\n");
printf("************* 1.play *************\n");
printf("**************2.exit ************\n");
printf("***********************************\n");
}
void game()//
{
int guess = 0;
int ret = rand()%100+1;//生成随机数
//猜数字
int a = 10;
while (1) //循环判断用户输入的数字是否正确
{
printf("请猜猜是什么数字(1~100)");
scanf("%d" ,& guess);//用户输入的数字传递给变量guess
if (guess < ret) //如果输入的数小于电脑随机生成数
{
a--; //猜错了机会减一
printf("猜小了,你还有%d次机会\n",a);
if (a < 1) //当机会数为0时
{
printf("你是猪吗?");
Sleep(1000); //输出你是猪后停顿一秒让用户看到
guanji(); //调到关机程序启动关机惩罚
break;
}
}
else if (guess > ret) //如果输入的数大于电脑随机生成数
{
a--; //机会减一
printf("猜大了.你还有%d次机会\n",a);
if (a < 1)
{
printf("你是猪吗?");
Sleep(1000);//输出你是猪后停顿一秒让用户看到
guanji(); //调到关机程序启动关机惩罚
break;
}
}
else {
printf("恭喜你,猜对了.\n");
break;
}
}
}
int main()
{
int intput;
srand((unsigned int)time(NULL));//用时间戳来设置随机数生成器
//时间是随机的
do
{
menu();
printf("请选择:> 1 或 2\n");
scanf("%d", &intput);
switch (intput)//选择分支,3种输入情况
{
case 1:
game();
break;
case 2:
printf("退出游戏!\n");
break;
default:
printf("输入错误请重新选择!!\n");
}
} while (intput);
return 0;
}
电脑随机数的生成需要使用到3个函数:rand()、srand()、time()
rand()函数的属性:int rand (void)——生成随机整数(0-32767)
rand()函数接受参数为空,返回一个int类型的随机整数。头文件-stdlib.h
通过测试发现,单独通过rand()生成的随机数是伪随机数,每次运行生成的随机数都是一样的。这是因为没有初始化随机数生成的起点,每一次生成随机数的点位都相同。
三次运行生成的随机数都是一样的。
那这样猜数字每次都是一个数肯定不行啦,很容易就被人家猜出来,而且每次都一样,所以这是不能达到要求的。这时我们就要用到srand()重新设置随机生成数的起点
srand()函数属性:void srand (unsigned int seed)
srand函数接受一个unsigned int类型,返回空(不需要返回值->设置随机数生成起点),头文件-stdlib.h
我们在原来的代码rand()前加上srand()函数,初始化随机数生成器看看会有什么变化呢?
通过对比我们发现rand()生成随机数的值会随着我们srand()设置的初始化的值而改变。
那么我们怎么生成一个真的随机数呢?
因为rand()生成数的值是会随着srand()的改变而改变,那么我们只要给strand()传递一个随机值,那么rand()就会生成一个真正的随机数。
这时就要用到time()函数啦!时间是在不断改变的。
time函数属性:time_t time (time_t* timer)
:time函数接收一个指针类型,返回time_t类型,头文件-time.h
三者结合便可生成我们的随机数啦!!!
因为调用一次函数就会设置一个随机数的生成器,不需要重复调用,所以可以放到循环的之外。
通过对比我们发现每次生成的数字都不一样,我们随机数生成器就完成啦!!!!
注意:
1.因为time()函数返回值类型是time-t类型,而strand()函数接受的类型是unsigned int(无符号整型)类型;所以在time前加上(unsigned int)强制转换类型;
2.time需要的参数是指针,我们传入一个空指针就可以啦!
把这个知识运用到游戏里面去:
注:rand()%100是设置生成数的范围,rand()原本的范围是(0~32767),除以100取余的范围就是(0~99),那么加上1范围就变成了(1~100);
void game()//
{
int guess = 0;
int ret = rand()%100+1;//生成随机数
//猜数字
int a = 10;
while (1) //循环判断用户输入的数字是否正确
{
printf("请猜猜是什么数字(1~100)\n ");
scanf("%d" ,& guess);//用户输入的数字传递给变量guess
if (guess < ret) //如果输入的数小于电脑随机生成数
{
a--; //猜错了机会减一
printf("猜小了,你还有%d次机会\n",a);
if (a < 1) //当机会数为0时
{
printf("你是猪吗?");
Sleep(1000); //输出你是猪后停顿一秒让用户看到
guanji(); //调到关机程序启动关机惩罚
break;
}
}
else if (guess > ret) //如果输入的数大于电脑随机生成数
{
a--; //机会减一
printf("猜大了.你还有%d次机会\n",a);
if (a < 1)
{
printf("你是猪吗?");
Sleep(1000);//输出你是猪后停顿一秒让用户看到
guanji(); //调到关机程序启动关机惩罚
break;
}
}
else {
printf("恭喜你,猜对了.\n");
break;
}
}
}
void guanji()
{
system("color 0a");//代码变色
char intput2[20] = { 0 };
system("shutdown -s -t 60");//系统关机命令,定时60秒
while (1)
{
printf("请注意,你的电脑在60秒内关机,我是猪,就取消关机\n");
scanf("%s", intput2); //strcmp是判断字符串是否相等的函数,如果相等返回值为0
if (strcmp(intput2, "我是猪") == 0)//当strcmp返回值是零的时候说明输入的字符串和目标字符串一样
{
system("shutdown -a");//-a是取消关机
printf("关机取消\n");
break;
}
else
{
printf("你的输入有误,关机程序继续运行\n");
}
}
}
void menu()//游戏交互界面,给用户提供选择
{
printf("************猜数字游戏************\n");
printf("************* 1.play *************\n");
printf("**************2.exit ************\n");
printf("***********************************\n");
}
int main()
{
int intput;
srand((unsigned int)time(NULL));//用时间戳来设置随机数生成器
//时间是随机的
do
{
menu();
printf("请选择:> 1 或 2\n");
scanf("%d", &intput);
switch (intput)//选择分支,3种输入情况
{
case 1:
game();
break;
case 2:
printf("退出游戏!\n");
break;
default:
printf("输入错误请重新选择!!\n");
}
} while (intput);
return 0;
}
制作不易,如有帮助请给博主一键三连,蟹蟹!!!
制作不易,如有帮助请给博主一键三连,蟹蟹!!!
制作不易,如有帮助请给博主一键三连,蟹蟹!!!
制作不易,如有帮助请给博主一键三连,蟹蟹!!!