初学者,用目前学到的知识自己动手编了个小游戏,算是复习吧,期间发现了几个问题想找人问一下
问题一:本来我想把各个游戏关卡分的判断模块和显示模块分散到单独的函数里,那样可读性应该会好很多,但是需要传递的变量太多,每个棋子都是单独的变量,返回值只能有一个,我不会弄,就放弃了 问题二:现在学的所有东西,都是自上而下顺序执行的,不能回到之前。我想把游戏改进一下,比如游戏进行到第二关了,操作步数过多,提示游戏失败,然后退回到第一关。ABCDE顺序执行,从E做判断跳转到B函数,接着执行BCDE,再来一次判断跳转到D函数。就像HTML里面的铆点和超链接,可以任意在一个函数之内或多个函数之间任意跳转。
这是游戏的灵感来源:http://www.
********************游戏说明********************
1.输入一个棋子的横纵坐标,按回车键确定;
2.该棋子及其上下左右相邻的棋子都会翻转;
3.将棋盘的所有棋子都由‘M’翻转为‘Q’即为过关
暂时就是这两个问题,应该怎么做呢?
程序代码:
#include<stdio.h> #include<process.h> int yun(int m); void shuoming(); int main() { int n=1,x,y,m1=77,m2=77,m3=77,m4=77,m5=77,m6=77,m7=77,m8=77,m9=77; //定义1~25棋子变量 int m10=77,m11=77,m12=77,m13=77,m14=77,m15=77,m16=77,m17=77,m18=77,m19=77; //本来想把各个关卡的判断部分做成单独的函数,游戏显示界面共用main函数,但是传递的变量太多,返回值只能有一个,所以放弃了。 int m20=77,m21=77,m22=77,m23=77,m24=77,m25=77; //看到一个词“数组”,还没开始学,据说可以用数组把所有数据整合到一个变量里面返回? shuoming(); do{ //游戏第一关开始 printf("**************************\n*第%d步 * 1 * 2 * 3 *\n**************************\n",n); //游戏界面 printf("* * * * *\n* 1 * %c * %c * %c *\n* * * * *\n**************************\n",m1,m2,m3); printf("* * * * *\n* 2 * %c * %c * %c *\n* * * * *\n**************************\n",m4,m5,m6); printf("* * * * *\n* 3 * %c * %c * %c *\n* * * * *\n**************************\n",m7,m8,m9); scanf("%d",&x); y=x%10; x=x/10; if (n>19) { printf("步数太多啦,游戏失败!重新试试吧!\n");//怎么才能做出n>20则提示“游戏失败”,并初始化游戏呢? exit(0); } else if(x==1) //逻辑判断模块,第一行 { if (y==1){m1=yun(m1);m2=yun(m2);m4=yun(m4);} //如果定位在第一列,那么改变一号,三号,四号位置的字母 else if(y==2){m1=yun(m1);m2=yun(m2);m3=yun(m3);m5=yun(m5);} else if(y==3){m2=yun(m2);m3=yun(m3);m6=yun(m6);} else {printf("输入错误,请重新输入!\n");} } else if(x==2) { if (y==1){m1=yun(m1);m4=yun(m4);m5=yun(m5);m7=yun(m7);} else if(y==2){m2=yun(m2);m4=yun(m4);m5=yun(m5);m6=yun(m6);m8=yun(m8);} else if(y==3){m3=yun(m3);m5=yun(m5);m6=yun(m6);m9=yun(m9);} else {printf("输入错误,请重新输入!\n");} } else if(x==3) { if (y==1){m4=yun(m4);m7=yun(m7);m8=yun(m8);} else if(y==2){m5=yun(m5);m7=yun(m7);m8=yun(m8);m9=yun(m9);} else if(y==3){m6=yun(m6);m8=yun(m8);m9=yun(m9);} else {printf("输入错误,请重新输入!\n");} } else {printf("输入错误,请重新输入!\n");} n++; }while(m1!=81 || m2!=81 || m3!=81 || m4!=81 || m5!=81 || m6!=81 || m7!=81 || m8!=81 || m9!=81); //当所有棋子全部翻转为Q则退出循环 printf("**************************\n*第%d步 * 1 * 2 * 3 *\n**************************\n",n); //输出过关图 printf("* * * * *\n* 1 * %c * %c * %c *\n* * * * *\n**************************\n",m1,m2,m3); printf("* * * * *\n* 2 * %c * %c * %c *\n* * * * *\n**************************\n",m4,m5,m6); printf("* * * * *\n* 3 * %c * %c * %c *\n* * * * *\n**************************\n",m7,m8,m9); printf("恭喜过关!!!!!!\n稍作休息,挑战下一关吧!\n"); n=1,m1=81,m2=77,m3=77,m4=81,m5=77,m6=81,m7=81,m8=77,m9=77,m10=81,m11=81,m12=77,m13=81,m14=77,m15=77,m16=81; //定义第二关变量,基本结构与第一关相同 do{ printf("********************************\n*第%d步 * 1 * 2 * 3 * 4 *\n********************************\n",n); printf("* * * * * *\n* 1 * %c * %c * %c * %c *\n* * * * * *\n********************************\n",m1,m2,m3,m4); printf("* * * * * *\n* 2 * %c * %c * %c * %c *\n* * * * * *\n********************************\n",m5,m6,m7,m8); printf("* * * * * *\n* 3 * %c * %c * %c * %c *\n* * * * * *\n********************************\n",m9,m10,m11,m12); printf("* * * * * *\n* 4 * %c * %c * %c * %c *\n* * * * * *\n********************************\n",m13,m14,m15,m16); scanf("%d",&x); y=x%10; x=x/10; if (n>50) { printf("步数太多啦,游戏失败!重新试试吧!\n"); //怎么才能从这一步回到到游戏第一关? exit(0); } else if(x==1) { if (y==1){m1=yun(m1);m2=yun(m2);m5=yun(m5);} else if(y==2){m1=yun(m1);m2=yun(m2);m3=yun(m3);m6=yun(m6);} else if(y==3){m2=yun(m2);m3=yun(m3);m4=yun(m4);m7=yun(m7);} else if(y==4){m4=yun(m4);m3=yun(m3);m8=yun(m8);} else {printf("输入错误,请重新输入!\n");} } else if(x==2) { if (y==1){m1=yun(m1);m5=yun(m5);m6=yun(m6);m9=yun(m9);} else if(y==2){m2=yun(m2);m5=yun(m5);m6=yun(m6);m7=yun(m7);m10=yun(m10);} else if(y==3){m3=yun(m3);m6=yun(m6);m7=yun(m7);m8=yun(m8);m11=yun(m11);} else if(y==4){m4=yun(m4);m7=yun(m7);m12=yun(m12);m8=yun(m8);} else {printf("输入错误,请重新输入!\n");} } else if(x==3) { if (y==1){m10=yun(m10);m5=yun(m5);m13=yun(m13);m9=yun(m9);} else if(y==2){m6=yun(m6);m9=yun(m9);m10=yun(m10);m11=yun(m11);m14=yun(m14);} else if(y==3){m7=yun(m7);m10=yun(m10);m11=yun(m11);m12=yun(m12);m15=yun(m15);} else if(y==4){m8=yun(m8);m11=yun(m11);m12=yun(m12);m16=yun(m16);} else {printf("输入错误,请重新输入!\n");} } else if(x==4) { if (y==1){m9=yun(m9);m13=yun(m13);m14=yun(m14);} else if(y==2){m10=yun(m10);m13=yun(m13);m14=yun(m14);m15=yun(m15);} else if(y==3){m11=yun(m11);m14=yun(m14);m15=yun(m15);m16=yun(m16);} else if(y==4){m12=yun(m12);m15=yun(m15);m16=yun(m16);} else {printf("输入错误,请重新输入!\n");} } else {printf("输入错误,请重新输入!\n");} n++; }while(m1!=81 || m2!=81 || m3!=81 || m4!=81 || m5!=81 || m6!=81 || m7!=81 || m8!=81 || m9!=81 || m10!=81 || m11!=81 || m12!=81 || m13!=81 || m14!=81 || m15!=81 || m16!=81); printf("********************************\n*第%d步 * 1 * 2 * 3 * 4 *\n********************************\n",n); printf("* * * * * *\n* 1 * %c * %c * %c * %c *\n* * * * * *\n********************************\n",m1,m2,m3,m4); printf("* * * * * *\n* 2 * %c * %c * %c * %c *\n* * * * * *\n********************************\n",m5,m6,m7,m8); printf("* * * * * *\n* 3 * %c * %c * %c * %c *\n* * * * * *\n********************************\n",m9,m10,m11,m12); printf("* * * * * *\n* 4 * %c * %c * %c * %c *\n* * * * * *\n********************************\n",m13,m14,m15,m16); printf("恭喜过关!!!!!!\n再挑战一关就可以看到奖励咯!\n"); n=1,m1=77,m2=77,m3=81,m4=77,m5=77,m6=77,m7=77,m8=81,m9=77,m10=77,m11=77,m12=77,m13=77,m14=77,m15=77,m16=77,m17=77,m18=77,m19=77,m20=77,m21=77,m22=77,m23=77,m24=77,m25=77; do{ printf("***************************************\n*第%d步 * 1 * 2 * 3 * 4 * 5 *\n***************************************\n",n); printf("* * * * * * *\n* 1 * %c * %c * %c * %c * %c *\n* * * * * * *\n***************************************\n",m1,m2,m3,m4,m5); printf("* * * * * * *\n* 2 * %c * %c * %c * %c * %c *\n* * * * * * *\n***************************************\n",m6,m7,m8,m9,m10); printf("* * * * * * *\n* 3 * %c * %c * %c * %c * %c *\n* * * * * * *\n***************************************\n",m11,m12,m13,m14,m15); printf("* * * * * * *\n* 4 * %c * %c * %c * %c * %c *\n* * * * * * *\n***************************************\n",m16,m17,m18,m19,m20); printf("* * * * * * *\n* 5 * %c * %c * %c * %c * %c *\n* * * * * * *\n***************************************\n",m21,m22,m23,m24,m25); scanf("%d",&x); y=x%10; x=x/10; if (n>98) { printf("步数太多啦,游戏失败!重新试试吧!\n"); //怎么才能从这一步回到到游戏第一关? exit(0); } else if(x==1) { if (y==1){m1=yun(m1);m2=yun(m2);m6=yun(m6);} else if(y==2){m1=yun(m1);m2=yun(m2);m3=yun(m3);m7=yun(m7);} else if(y==3){m2=yun(m2);m3=yun(m3);m4=yun(m4);m8=yun(m8);} else if(y==4){m3=yun(m3);m4=yun(m4);m5=yun(m5);m9=yun(m9);} else if(y==5){m4=yun(m4);m5=yun(m5);m10=yun(m10);} else {printf("输入错误,请重新输入!\n");} } else if(x==2) { if (y==1){m1=yun(m1);m6=yun(m6);m7=yun(m7);m11=yun(m11);} else if(y==2){m2=yun(m2);m6=yun(m6);m7=yun(m7);m8=yun(m8);m12=yun(m12);} else if(y==3){m3=yun(m3);m7=yun(m7);m8=yun(m8);m9=yun(m9);m13=yun(m13);} else if(y==4){m4=yun(m4);m8=yun(m8);m9=yun(m9);m10=yun(m10);m14=yun(m14);} else if(y==5){m5=yun(m5);m9=yun(m9);m10=yun(m10);m15=yun(m15);} else {printf("输入错误,请重新输入!\n");} } else if(x==3) { if (y==1){m6=yun(m6);m11=yun(m11);m12=yun(m12);m16=yun(m16);} else if(y==2){m7=yun(m7);m11=yun(m11);m12=yun(m12);m13=yun(m13);m17=yun(m17);} else if(y==3){m8=yun(m8);m11=yun(m12);m12=yun(m13);m13=yun(m14);m18=yun(m18);} else if(y==4){m9=yun(m9);m13=yun(m13);m14=yun(m14);m15=yun(m15);m19=yun(m19);} else if(y==5){m10=yun(m10);m14=yun(m14);m15=yun(m15);m20=yun(m20);} else {printf("输入错误,请重新输入!\n");} } else if(x==4) { if (y==1){m11=yun(m11);m16=yun(m16);m17=yun(m17);m21=yun(m21);} else if(y==2){m12=yun(m12);m16=yun(m16);m17=yun(m17);m18=yun(m18);m22=yun(m22);} else if(y==3){m13=yun(m13);m17=yun(m17);m18=yun(m18);m19=yun(m19);m23=yun(m23);} else if(y==4){m14=yun(m14);m18=yun(m18);m19=yun(m19);m20=yun(m20);m24=yun(m24);} else if(y==5){m15=yun(m15);m19=yun(m19);m20=yun(m20);m25=yun(m25);} else {printf("输入错误,请重新输入!\n");} } else if(x==5) { if (y==1){m16=yun(m16);m21=yun(m21);m22=yun(m22);} else if(y==2){m17=yun(m17);m21=yun(m21);m22=yun(m22);m23=yun(m23);} else if(y==3){m18=yun(m18);m22=yun(m22);m23=yun(m23);m24=yun(m24);} else if(y==4){m19=yun(m19);m23=yun(m23);m24=yun(m24);m25=yun(m25);} else if(y==5){m20=yun(m20);m24=yun(m24);m25=yun(m25);} else {printf("输入错误,请重新输入!\n");} } else {printf("输入错误,请重新输入!\n");} n++; }while(m1!=81 || m2!=81 || m3!=81 || m4!=81 || m5!=81 || m6!=81 || m7!=81 || m8!=81 || m9!=81 || m10!=81 || m11!=81 || m12!=81 || m13!=81 || m14!=81 || m15!=81 || m16!=81 || m17!=81 || m18!=81 || m19!=81 || m20!=81 || m21!=81 || m22!=81 || m23!=81 || m24!=81 || m25!=81); printf("***************************************\n*第%d步 * 1 * 2 * 3 * 4 * 5 *\n***************************************\n",n); printf("* * * * * * *\n* 1 * %c * %c * %c * %c * %c *\n* * * * * * *\n***************************************\n",m1,m2,m3,m4,m5); printf("* * * * * * *\n* 2 * %c * %c * %c * %c * %c *\n* * * * * * *\n***************************************\n",m6,m7,m8,m9,m10); printf("* * * * * * *\n* 3 * %c * %c * %c * %c * %c *\n* * * * * * *\n***************************************\n",m11,m12,m13,m14,m15); printf("* * * * * * *\n* 4 * %c * %c * %c * %c * %c *\n* * * * * * *\n***************************************\n",m16,m17,m18,m19,m20); printf("* * * * * * *\n* 5 * %c * %c * %c * %c * %c *\n* * * * * * *\n***************************************\n",m21,m22,m23,m24,m25); printf("恭喜通关!\n"); printf("源代码:http://pan.baidu.com/s/1gf0Xojh 密码:8gsc \n"); scanf("%d",&n); //没什么用,只是为了让程序暂停,而不是直接退出 return 0; } int yun(int m) //运算函数,将棋子翻转 { if((m%10)==7) m=m+4; else m=m-4; return m; } void shuoming() //说明文档 { printf("********************游戏说明********************\n1.输入一个棋子的横纵坐标,按回车键确定;\n2.该棋子及其上下左右相邻的棋子都会翻转;\n3.将棋盘的所有棋子都由‘M’翻转为‘Q’即为过关;\n4.本游戏共有三关,通关即可看到程序源码\n\t\t\t\t\t by饺子\n"); }
[此贴子已经被作者于2016-11-10 11:38编辑过]