迷宫

来源:互联网 发布:ubuntu wine qq 乱码 编辑:程序博客网 时间:2024/05/08 20:04

一. 实验目的及实验环境

   1、实验目的:理解和掌握C语言中函数的定义,参数的使用,函数调用的方法;学习通过功能分解来设计和编写较复杂程序的方法。

   2、实验环境:Windows 8.1,Visual C++

 

实验内容

      设计并编写一个走迷宫的游戏,从入口进入寻找通路走到出口,判定胜利。

 

三.方案设计

该游戏具有的一些特点:

游戏界面

1. 游戏有简洁,美观的界面,界面间可以切换

2. 界面菜单中项目的可以按键选择进入,游戏有多种模式可供玩家选择。

    3. 迷宫的地图可以电脑随机生成,并且道路尽可能的复杂。

4. 玩家也可以选择根据自己的想法手动建造迷宫,建造完成后可以让好友进行试走,增强游戏的可玩性

 

四.数据测试

1.随机地图:

电脑随机给出一个迷宫地图,让迷宫尽可能的复杂,使地图更加神秘,吸引玩家的兴趣,让玩家全身心的投入其中去探索,进而发现其中的乐趣。

但是随机地图会存在一个不容忽视的问题,那就是产生的地图可能无法走通,因为对于随机地图,系统不会检查它产生的一些错误,这可能会给玩家增加难度,让玩家失去耐心。

 2.手动建造地图:

手动建造地图可以最大限度的发挥玩家的想象力,然玩家自己深入游戏中,增强玩家的思维能力。

最主要的是,手动建造迷宫避免了随机产生地图存在的不能走通的问题,避免了BUG的产生。

 五.总结

 

1.实验过程中遇到的问题

 

    实验过程中遇到的主要问题是如何实现迷宫地图的随机生成,以及如何让星号移动。

 

2.对设计及调试过程的心得体会

a.  当程序过长,或需要多个功能时,可以针对每个功能自定义函数,最后需要时,只要主函数直接调用即可,很方便,而且易于读写,容易修改,并且大大减少了变量的数据,程序易于控制。

b.  体会到了各种头文件的用处,以及全局变量和局部变量在程序中的作用。

六. 附 录

核心源代码:  

int a=0;b=1;char s[21][47];Inputs(){int i,j,n;srand((unsigned)time(NULL));for(i=0;i<21;i++){for(j=0;j<46;j++)s[i][j]=' ';s[i][j]=0;}for(n=0;n<470;n++){i=rand()%100;j=rand()%100;if(i>20||j>=46){n--;continue;}s[i][j]='X';}for(i=0;i<21;i++){s[i][0]=' ';s[i][45]=' ';}s[a][b]=2;s[0][0]=26;s[20][45]=26;}Outputs(){int i,j;printf("\n");for(i=0;i<21;i++){for(j=0;j<46;j++)printf("%c",s[i][j]);printf("\n");}}Madeit(){int i,j;for(i=0;i<21;i++){for(j=0;j<46;j++)s[i][j]='X';s[i][j]=0;}for(i=0;i<21;i++){s[i][0]=' ';s[i][45]=' ';}s[a][b]=2;s[0][0]=26;s[20][45]=26;}fun(){printf("*********************\n");}main(){int a1,b1,e;char c,d;printf("欢迎进入迷宫游戏!\n");fun();printf("      1.开始游戏\n");printf("      2.退出游戏\n");fun();printf("【直接按相应序号选择功能】\n");scanf("%d",&a1);system("cls");switch(a1){case 1:fun();printf("1.随机生成迷宫地图\n");printf("2.手动建造迷宫地图\n");fun();scanf("%d",&b1);system("cls");switch(b1){case 1:Inputs();Outputs();while(a!=20 || b!=45){printf("\n\n\npress w to up\npress a to left\npress s to down\npress d to right\n");c=getch();switch(c){case 'w':a--;if(a<0)a=0;else{if(s[a][b]!='X'){s[a][b]=2;       s[a+1][b]=' ';}elsea++;}break;case 'a':b--;if(b<0)b=0;else{if(s[a][b]!='X'){s[a][b]=2;s[a][b+1]=' ';}elseb++;}break;case 's':a++;if(a>20)a=20;else{if(s[a][b]!='X'){s[a][b]=2;s[a-1][b]=' ';}elsea--;}break;case 'd':b++;if(b>45)b=45;else{if(s[a][b]!='X'){s[a][b]=2;s[a][b-1]=' ';}elseb--;}break;}system("cls");Outputs();}printf("\n     You win\n");break;case 2:Madeit();Outputs();while(a!=20||b!=45){printf("\n\n\npress w to up\npress a to left\npress s to down\npress d to right\n");c=getch();switch(c){case 'w':a--;if(a<0)a=0;else{s[a][b]=2;s[a+1][b]=' ';}break;case 'a':b--;if(b<0)b=0;else{s[a][b]=2;s[a][b+1]=' ';}break;case 's':a++;if(a>20)a=20;else{s[a][b]=2;s[a-1][b]=' ';}break;case 'd':b++;if(b>45)b=45;else{s[a][b]=2;s[a][b-1]=' ';}break;}system("cls");Outputs();}printf("\n\n       建造完成!\n\n");fun();printf("         1.重走迷宫\n");printf("         2.退出游戏\n");fun();scanf("%d",&e);system("cls");switch(e){case 1:a=0,b=1;  s[a][b]=2;        s[0][0]=26;                  s[20][45]=26;  Outputs();while(a!=20 || b!=45){printf("\n\n\npress w to up\npress a to left\npress s to down\npress d to right\n");d=getch();switch(d){case 'w':a--;if(a<0)a=0;else{if(s[a][b]!='X'){s[a][b]=2;s[a+1][b]=' ';}elsea++;}break;case 'a':b--;if(b<0)b=0;else{if(s[a][b]!='X'){s[a][b]=2;s[a][b+1]=' ';}elseb++;}break;case 's':a++;if(a>20)a=20;else{if(s[a][b]!='X'){s[a][b]=2;s[a-1][b]=' ';}elsea--;}break;case'd':b++;if(b>45)b=45;else{if(s[a][b]!='X'){s[a][b]=2;s[a][b-1]=' ';}elseb--;}break;}system("cls");Outputs();}printf("\n     You win\n");break;case 2:return 0;}}case 2:return 0;}return 0;}


0 0