前言
(声明一下,凡人小严初学C语言,概念性的内容就不细说啦,还是注重实践理解)
要求一:做出规则界面,输入数字‘0’进入游戏菜单界面。
要求二:游戏菜单界面,输入数字‘1’开始游戏;输入数字‘2’进入模式选择;输入数字‘3’退出游戏。
要求三:模式选择分为两种,第一种无限输入次数,第二种自定义输入次数。
要求四:进入游戏后,需要添加输入数字‘999’强制退出游戏。
要求五:若玩家输入数字不在区间内,提示玩家。
要求六:尽可能多的提示玩家下一步操作
注意:以下分布只展示部分代码,均为截取,文章结尾为完整代码及注释。
第一步:int main()return 0 起步喽
首先,主函数,我们肯定要先完成要求一。利用printf函数打印出规则界面和下一步操作,再利用scanf函数储存输入数据。
int input = 0;
printf("******猜数字******\n");
printf("介绍:\n系统将随机生成一个1~100的数字,请输入一个在此区间的数字,系统会自动判断您输入的输与随机数的大小。\n");
printf("输入 0 进入菜单\n");
scanf("%d", &input);
第二步:做出菜单界面
这里,我们为了简化主函数,我们就可以简单地利用子函数。于是,我们引入子函数menu()打印菜单(之后的游戏程序也相同)。为了进入不同界面,这里,我们就可以利用Switch函数判断输入数据来完成。
void menu()
{
printf("请输入对应序号进入\n");
printf("******1.开始******\n");
printf("****2.模式设置****\n");
printf("******3.退出******\n");
}
switch (input)
{
case 0:
menu();
case 1:
game();
case 2:
printf("请输入模式序号\n");
printf("11:无限输入次数(系统默认)\n");
printf("22:自定义输入次数\n");
scanf("%d", &flat);
break;
case 3:
printf("游戏已关闭\n");
break;
default:
printf("输入错误,请重新输入\n");
原本是想把模式界面也分隔出去,但不明确子函数menu()是否能创建多个,所以,就直接在case 2:下编写。
第三步:编写跳转语句
现在就涉及到一个问题了,打印完菜单以及选择完模式后,我们如何跳转回初始游戏菜单界面。这里,我选择使用goto语句,构建多个定义跳转点。
int main()
{
int input = 0;
printf("******猜数字******\n");
printf("介绍:\n系统将随机生成一个1~100的数字,请输入一个在此区间的数字,系统会自动判断您输入的输与随机数的大小。\n");
printf("输入 0 进入菜单\n");
again:
scanf("%d", &input);
switch (input)
{
case 0:
agains:
menu();
goto again;
case 1:
game();
goto agains;
case 2:
printf("请输入模式序号\n");
printf("11:无限输入次数(系统默认)\n");
printf("22:自定义输入次数\n");
scanf("%d", &flat);
goto agains;
break;
case 3:
printf("游戏已关闭\n");
break;
default:
printf("输入错误,请重新输入\n");
goto again;
}
return 0;
}
到这里我们就完成了主函数的编写,完成了要求一和要求二。
第四步:编写game()
既然是猜数字游戏,那么,每一次的游戏开始,系统都要随机生成一个玩家无法预测的数字。这里,我们首先先引入rand()函数,随机生成数字。简单编一个(非猜数字内)。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 0;
for (i = 1; i < 10; i++)
{
int num = rand() % 100 + 1;
printf("%d\n", num);
}
return 0;
}
这里我们可以看到,两次运行代码,随机生成的数字没有变化。
这是因为rand()生成不同的数字依赖于srand()函数,srand()函数内种子取值不同可使rand()生成数改变。为了能让rand()随时改变,我们就可以将种子取值与时间关联,这样随机数就可以一直改变了。
srand((unsigned int)time(NULL));
int num = rand() % 100 + 1;
准备工作搞定,现在就是简单的输入数字,让系统判断输入值与随机值大小了并完成要求五。
我们利用while语句,if语句,else语句,break语句完成
while (scanf("%d", &a) != EOF)
{
if (a > num)
{
if (a > 100)
{
printf("您输入的数字超过系统最大随机值\n");
printf("请重新输入\n");
}
else
printf("您输的数字比随机数大\n");
}
else if (a < num)
{
if (a < 0)
{
printf("您输入的数字低于系统最小随机值\n");
printf("请重新输入\n");
}
else
printf("您输的数字比随机数小\n");
}
else
break;
}
}
接下来,对自定义输入次数模式进行编写。与上文类似。
int count = 0;
printf("请输入您想限制的次数\n");
printf("请注意:0<= count <= 100\n");
scanf("%d", &count);
while (scanf("%d", &a) != EOF)
{
if (count == 0)
{
d = 0;
break;
}
if (a > num)
{
if (a > 100)
{
printf("您输入的数字超过系统最大随机值\n");
printf("请重新输入\n");
}
else
printf("您输的数字比随机数大\n");
count--;
}
else if (a < num)
{
if (a < 0)
{
printf("您输入的数字低于系统最小随机值\n");
printf("请重新输入\n");
}
else
printf("您输的数字比随机数小\n");
count--;
}
else
break;
}
}
第五步:编写模式选择程序
因为,无限输入次数模式为系统默认,我们就可以定义一个全局变量int flat = 11。我们上文在case 2:已经编写了 flat 变量的输入值,因此结合if语句我们就可以实现模式的更换了。
if (flat == 11)
{
无限输入次数模式
}
else if(flat == 22)//注意不要把“=”当成等于了
{
自定义输入次数模式
}
完成要求三
第六步:游戏进行时强制退出
既然,游戏进行时,那么我们正在输入数字,便可利用一个特殊数字组合结合if语句和goto语句完成强制退出的执行。
if (flat == 11)
{
while (scanf("%d", &a) != EOF)
{
if (a == 999)
goto againt;
if (a > num)
{
if (a > 100)
{
printf("您输入的数字超过系统最大随机值\n");
printf("请重新输入\n");
}
else
printf("您输的数字比随机数大\n");
}
else if (a < num)
{
if (a < 0)
{
printf("您输入的数字低于系统最小随机值\n");
printf("请重新输入\n");
}
else
printf("您输的数字比随机数小\n");
}
else
break;
}
}
else if (flat == 22)
{
int count = 0;
printf("请输入您想限制的次数\n");
printf("请注意:0<= count <= 100\n");
scanf("%d", &count);
printf("游戏继续\n");
while (scanf("%d", &a) != EOF)
{
if (a == 999)
goto againt;
if (count == 0)
{
d = 0;
break;
}
if (a > num)
{
if (a > 100)
{
printf("您输入的数字超过系统最大随机值\n");
printf("请重新输入\n");
}
else
printf("您输的数字比随机数大\n");
count--;
}
else if (a < num)
{
if (a < 0)
{
printf("您输入的数字低于系统最小随机值\n");
printf("请重新输入\n");
}
else
printf("您输的数字比随机数小\n");
count--;
}
else
break;
}
}
if (d == 1)
{
printf("恭喜你猜中了\n");
goto againr;
}
else if (d == 0)
{
printf("很遗憾,您没有机会了\n");
goto againr;
}
againt:
printf("游戏已经强制退出\n");
againr:
;
}
至此,我们就完成了所有要求了。
本游戏主要以if语句、else语句,while语句、Switch语句,break语句、goto语句完成。
美中不足就是没有结合continue语句。
ok,以上便是我想表达的C语言分支循环知识。
我的想法是通过分支循环能够完成一些简单的模式跳转选择吧。
下面是代码及注释:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
int flat = 11;//定义全局变量来完成默认游戏模式
void menu()//利用menu()函数编写游戏菜单界面,同时简化主函数,以达到分块编写代码
{
printf("请输入对应序号进入\n");
printf("******1.开始******\n");
printf("****2.模式设置****\n");
printf("******3.退出******\n");
}
void game()//利用game()函数编写游戏系统
{
printf("游戏已开始\n");
printf("若要强制退出,请输入999\n");
srand((unsigned int)time(NULL));//利用时间完成srand()函数种子的持续改变
int num = rand() % 100 + 1;
int a = 0;
int d = 1;//定义变量决定无限输入次数模式和自定义模式游戏结束标语
if (flat == 11)//若flat为11,游戏模式为无限输入次数模式
{
while (scanf("%d", &a) != EOF)
{
if (a == 999)
goto againt;//输入999直接跳转到game()函数末结束游戏
if (a > num)
{
if (a > 100)
{
printf("您输入的数字超过系统最大随机值\n");
printf("请重新输入\n");
}
else
printf("您输的数字比随机数大\n");
}
else if (a < num)
{
if (a < 0)
{
printf("您输入的数字低于系统最小随机值\n");
printf("请重新输入\n");
}
else
printf("您输的数字比随机数小\n");
}
else
break;
}
}
else if (flat == 22)//若flat为22,模式切换到自定义输入次数模式
{
int count = 0;
printf("请输入您想限制的次数\n");
printf("请注意:0<= count <= 100\n");
scanf("%d", &count);
printf("游戏继续\n");
while (scanf("%d", &a) != EOF)
{
if (a == 999)
goto againt;//输入999跳转到game()函数末结束游戏
if (count == 0)
{
d = 0;//改变变量b的值,执行自定义输入次数结束标语
break;
}
if (a > num)
{
if (a > 100)
{
printf("您输入的数字超过系统最大随机值\n");
printf("请重新输入\n");
}
else
printf("您输的数字比随机数大\n");
count--;
}
else if (a < num)
{
if (a < 0)
{
printf("您输入的数字低于系统最小随机值\n");
printf("请重新输入\n");
}
else
printf("您输的数字比随机数小\n");
count--;
}
else
break;
}
}
if (d == 1)
{
printf("恭喜你猜中了\n");
goto againr;//为防止不同标语一起打印,使用goto语句进行跳过
}
else if (d == 0)
{
printf("很遗憾,您没有机会了\n");
goto againr;
}
againt://强制退出游戏标语跳转点
printf("游戏已经强制退出\n");
againr://防止标语一起打印跳转点
;
}
int main()
{
int input = 0;
printf("******猜数字******\n");
printf("介绍:\n系统将随机生成一个1~100的数字,请输入一个在此区间的数字,系统会自动判断您输入的输与随机数的大小。\n");
printf("输入 0 进入菜单\n");
again://菜单打印后进行选择跳转点
scanf("%d", &input);
switch (input)
{
case 0:
agains://模式修改后回弹菜单界面点 兼 游戏结束跳转菜单界面点
menu();
goto again;
case 1:
game();
goto agains;
case 2:
printf("请输入模式序号\n");
printf("11:无限输入次数(系统默认)\n");
printf("22:自定义输入次数\n");
scanf("%d", &flat);
goto agains;
break;
case 3:
printf("游戏已关闭\n");
break;
default:
printf("输入错误,请重新输入\n");
goto again;
}
return 0;
}