迷宫
来源:互联网 发布: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;}
- 迷宫
- 迷宫
- 迷宫
- 迷宫
- 迷宫?
- 迷宫
- 迷宫
- 迷宫
- 迷宫
- 迷宫
- 迷宫
- 迷宫
- 迷宫
- 迷宫。。。
- 迷宫
- 迷宫
- 迷宫
- 迷宫
- 使用Eclipse+maven3插件开发一个Servlet3.0的简单例子
- oc--类的声明和实现
- typedef 与define一些差异
- 第九周项目五方程也是类
- 调试Plugin
- 迷宫
- 11572 - Unique Snowflakes
- 黑马程序员--集合框架:List、Set和Map体系
- 文章标题
- linux 下打开eclipse报错(A Java RunTime Environment (JRE) or)
- 第5章的5.19
- Django学习笔记(4):Django模板系统(上)
- 收集遇到的问题
- 通过函数调用对字符串数组进行各种排序