目录
整体设计框架:
1.创建一个菜单函数menu,负责原始界面的输出
2.创建一个游戏函数game,负责游戏逻辑的实现
3.在主函数中通过do-while语句和switch语句实现主界面的选择
涉及到的头文件:
#include<stdio.h>
#include<time.h>//负责time函数
#include<stdlib.h>//负责srand与rand函数
菜单函数:
void menu()
{
printf(" **********************\n");
printf(" *******猜数游戏*******\n");
printf(" *******【菜单】*******\n");
printf(" ********请选择********\n");
printf(" **1->【开始游戏】*****\n");
printf(" **0->【结束游戏】*****\n");
printf(" **********************\n");
}
主函数:
int main()
{
srand((unsigned)time(NULL));
int x;
do
{
menu();
scanf("%d",&x);
switch(x)
{
case 1:
game();
break;
case 0:
printf("游戏结束");
break;
default:
printf("输入有误,请重新输入\n");
}
} while(x);
return 0;
}
在这里先输出菜单,再输入变量x,只要x的值不为0,游戏就会被一直执行下去,同时会根据x的值进入不同的case。
在主函数中 srand((unsigned)time(NULL))是用来产生随机数的,后续会详细介绍。
游戏函数:
void game()
{
int min,max;
again:
printf("请输入数字范围的最小值: \n");
scanf("%d",&min);
printf("请输入数字范围的最大值: \n");
scanf("%d",&max);
if(max<=min)
{
printf("输入有误,请重新输入范围\n");
goto again;
}
int x,number=min+rand()%(max-min),count=5;
printf("请猜一个数字: ");
while(1)
{
scanf("%d",&x);
if(x>min&&x<max)
count--;
if(count==0)
{
printf("很遗憾,次数已用完,挑战失败\n");
break;
}
if(x>number&&x>min&&x<max)
printf("猜大了,请再猜一次\n你还有%d次机会\n",count);
else if(x<number&&x>min&&x<max)
printf("猜小了,请再猜一次\n你还有%d次机会\n",count);
else if(x>max||x<min)
printf("输入的数据有误请重新输入\n");
else
{ printf("猜对啦,恭喜你挑战成功\n");
break;
}
}
}
在这里,设置了一个计数器,每输入一个在指定范围内的值时,计数器就会减一,当计数器为0时,会强制退出游戏。
这里的rand()会每次产生一个随机数,再通过min+rand()%(max-min+1)这个表达式把随机数的范围限制在自己输入的范围内。
最终代码实现:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void menu()
{
printf(" **********************\n");
printf(" *******猜数游戏*******\n");
printf(" *******【菜单】*******\n");
printf(" ********请选择********\n");
printf(" **1->【开始游戏】*****\n");
printf(" **0->【结束游戏】*****\n");
printf(" **********************\n");
}
void game()
{
int min,max;
again:
printf("请输入数字范围的最小值: \n");
scanf("%d",&min);
printf("请输入数字范围的最大值: \n");
scanf("%d",&max);
if(max<=min)
{
printf("输入有误,请重新输入范围\n");
goto again;
}
int x,number=min+rand()%(max-min),count=5;
printf("请猜一个数字: ");
while(1)
{
scanf("%d",&x);
if(x>min&&x<max)
count--;
if(count==0)
{
printf("很遗憾,次数已用完,挑战失败\n");
break;
}
if(x>number&&x>min&&x<max)
printf("猜大了,请再猜一次\n你还有%d次机会\n",count);
else if(x<number&&x>min&&x<max)
printf("猜小了,请再猜一次\n你还有%d次机会\n",count);
else if(x>max||x<min)
printf("输入的数据有误请重新输入\n");
else
{ printf("猜对啦,恭喜你挑战成功\n");
break;
}
}
}
int main()
{
srand((unsigned)time(NULL));
int x;
do
{
menu();
scanf("%d",&x);
switch(x)
{
case 1:
game();
break;
case 0:
printf("游戏结束");
break;
default:
printf("输入有误,请重新输入\n");
}
} while(x);
return 0;
}