《C语言课程设计-迷宫游戏》由会员分享,可在线阅读,更多相关《C语言课程设计-迷宫游戏(15页珍藏版)》请在人人文库网上搜索。
1、计算机技术基础课程设计C语言设计报告题目:完整的二维迷宫游戏学院:工商管理学院专业:信息系统与信息管理 班级:050507姓名:孙月指导教师:张首伟 设计日期:12月10日题目:完整的二维迷宫游戏一、选题背景:问题的提出:我们在玩迷宫游戏的时候,常常在过了一关之后就结束了,这里设计的迷宫游戏足够多,难以程度也不尽相同,可以过瘾的玩。模仿的有那么一点意思,还请多多指教!二、设计思想:(1).问题描述用一个m行n列的二维数组来表示迷宫。数组中每个元素的取值为0或1,其中值0表示 通路,值1表示阻塞,入口在左上方(1,1)处,出口在右下方(m,n)处,如图所示。要求求出从迷宫入口到出口有无。
2、通路,若有通路则指出其中一条通路的路径,即输出找到通路的迷宫数组,其中通路上的“0”用另一数字(例如8)替换,同时打印出所走通路径上每一步的位置坐标及下一步的方向。(2)求解方法说明:1为使问题一般化,假设以二维数组maze(1:m,1:n)表示迷宫,并设maze(i,j)表示任一位置。2对每个位置maze(i,j),可移动的八个方向从正东起顺时针方向顺序为:E,SE,S,SW,W,NW,N,NE。再用一个二维数组move表示这八个方向上坐标的增量,如下表所示,move(v,1)表示第v个方向上i的增量, move(v,2)表示第v个方向上j的增量。三、程序流程图四、程序清单:一、二、#inc。
3、lude #include #include #include #include #define N 20/*迷宫的大小,可改变*/intoldmapNN;/*递归用的数组,用全局变量节约时间*/intyes=0;/*yes是判断是否找到路的标志,1找到,0没找到*/intway1002,wayn=0;/*way数组是显示路线用的,wayn是统计走了几个格子*/void Init(void);/*图形初始化*/void Close(void);/*图形关闭*/void DrawPeople(int *x,int *y,int n);/*画人工探索物图*/void PeopleFind(int 。
4、(*x)N);/*人工探索*/void WayCopy(int (*x)N,int (*y)N);/*为了8个方向的递归,把旧迷宫图拷贝给新数组*/intFindWay(int (*x)N,int i,int j);/*自动探索函数*/void MapRand(int (*x)N);/*随机生成迷宫函数*/void PrMap(int (*x)N);/*输出迷宫图函数*/void Result(void);/*输出结果处理*/void Find(void);/*成功处理*/void NotFind(void);/*失败处理*/void main(void)/*主函数*/int mapNN; /。
5、*迷宫数组*/char ch;clrscr();printf(n Please select hand(1) else auton);/*选择探索方式*/scanf(%c,&ch);Init();/*初始化*/MapRand(map);/*生成迷宫*/PrMap(map);/*显示迷宫图*/if(ch=1)PeopleFind(map);/*人工探索*/elseFindWay(map,1,1);/*系统自动从下标1,1的地方开始探索*/Result();/*输出结果*/Close();void Init(void)/*图形初始化*/int gd=DETECT,gm;initgraph(&gd,。
6、&gm,c:tc);void DrawPeople(int *x,int *y,int n)/*画人工控制图*/*如果将以下两句注释掉,则显示人工走过的路径,*/setfillstyle(SOLID_FILL,WHITE);/*设置白色实体填充样式*/bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);/*恢复原通路*/switch(n)/*判断x,y的变化,8个方向的变化*/case 1: (*x)-;break; /*上*/case 2: (*x)-;(*y)+;break ;/*右上*/case 3: (*y)+;brea。
7、k;/*右*/case 4: (*x)+;(*y)+;break; /*右下*/case 5: (*x)+;break;/*下*/case 6: (*x)+;(*y)-;break; /*左下*/case 7: (*y)-;break;/*左*/case 8: (*x)-;(*y)-;break; /*左上*/setfillstyle(SOLID_FILL,RED);/*新位置显示探索物*/bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);void PeopleFind(int (*map)N)/*人工手动查找*/int x,。
8、y;char c=0;/*接收按键的变量*/x=y=1;/*人工查找的初始位置*/setcolor(11);line(500,200,550,200);outtextxy(570,197,d);line(500,200,450,200);outtextxy(430,197,a);line(500,200,500,150);outtextxy(497,130,w);line(500,200,500,250);outtextxy(497,270,x);line(500,200,450,150);outtextxy(445,130,q);line(500,200,550,150);outtextxy。
9、(550,130,e);line(500,200,450,250);outtextxy(445,270,z);line(500,200,550,250);outtextxy(550,270,c);/*以上是画8个方向的控制介绍*/setcolor(YELLOW);outtextxy(420,290,Press Enter to end);/*压回车键结束*/setfillstyle(SOLID_FILL,RED);bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);/*入口位置显示*/while(c!=13)/*如果按下的不是回车键*/c=getch(。
10、);/*接收字符后开始各个方向的探索*/if(c=w&mapx-1y!=1)DrawPeople(&x,&y,1);/*上*/elseif(c=e&mapx-1y+1!=1)DrawPeople(&x,&y,2);/*右上*/elseif(c=d&mapxy+1!=1)DrawPeople(&x,&y,3);/*右*/elseif(c=c&mapx+1y+1!=1)DrawPeople(&x,&y,4);/*右下*/elseif(c=x&mapx+1y!=1)DrawPeople(&x,&y,5);/*下*/elseif(c=z&mapx+1y-1!=1)DrawPeople(&x,&y,6)。
11、; /*左下*/elseif(c=a&mapxy-1!=1)DrawPeople(&x,&y,7); /*左*/else if(c=q&mapx-1y-1!=1)DrawPeople(&x,&y,8); /*左上*/setfillstyle(SOLID_FILL,WHITE); /*消去红色探索物,恢复原迷宫图*/bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);if(x=N-2&y=N-2)/*人工控制找成功的话*/yes=1; /*如果成功标志为1*/void WayCopy(int (*oldmap)N,int (*map)N)/*拷贝迷宫数组。
12、 */int i,j;for(i=0;i=0;i-)bar(100+wayi1*15-6,50+wayi0*15-6,100+wayi1*15+6,50+wayi0*15+6);sleep(1);/*控制显示时间*/bar(100+(N-2)*15-6,50+(N-2)*15-6,100+(N-2)*15+6,50+(N-2)*15+6); /*在目标点标红色*/setcolor(GREEN);settextstyle(0,0,2);/*设置字体大小*/outtextxy(130,400,Find a way!);void NotFind(void)/*没找到通路*/setcolor(GREE。
13、N);settextstyle(0,0,2);/*设置字体大小*/outtextxy(130,400,Not find a way!);void Result(void)/*结果处理*/if(yes)/*如果找到*/Find();else/*没找到路*/NotFind();getch();void Close(void)/*图形关闭*/closegraph();五、主要解决问题的方法及技术关键1、 主要问题及解决方法路径实现问题用函数实现路径光标的移动,是随系统设计可行性而走的.光标的移动处理问题光标的移动处理是通过int key(int key,int count)函数定义,再通过up,down等函数对光标实行移动!2、 技术关键迷宫路线的制作移动轨迹光标的实现路径走向的决定键的选择与编译六、设计结果说明(1)设计优点:本程序简单明了,应用方便,运用了简单的C语言,用户可以很容易的进行游戏。而且游戏难易程度由简单到高难,有很好的娱乐性。(2)设计缺点:程序过于冗长繁琐,游戏内容比较单一。