C语言课程设计-迷宫游戏_第1页
C语言课程设计-迷宫游戏_第2页
C语言课程设计-迷宫游戏_第3页
C语言课程设计-迷宫游戏_第4页
C语言课程设计-迷宫游戏_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言课程设计-迷宫游戏设计报告题LI:完整的二维迷宫游戏学院:工商管理学院专业:信息系统与信息管理班级:050507姓名:孙月指导教师:张首伟设计日期:2004年12月10日题LI:完整的二维迷宫游戏一、选题背景:问题的提出:我们在玩迷宫游戏的时候,常常在过了一关之后就结束了这里设 计的迷宫游戏足够多难以程度也不尽相同可以过瘾的玩。模仿的有那么一点意 思还请多多指教:二、设计思想:,1,.问题描述用一个m行n列的二维数组来表示迷宫。数组中每个元素的取值为0或1其 中值0表示通路值1表示阻塞入口在左上方,11,处出口在右下方,m, n,处 如图所示。要求求出从迷宫入口到出口有无通路若有通路则指

2、出其中一条通路 的路径即输出找到通路的迷宫数组其中通路上的0”用另一数字,例如&替 换同时打印出所走通路径上每一步的位置坐标及下一步的方向。,2,(求解方法说明:1(为使问题一般化假设以二维数组maze(l:m,l:n)表示迷宫并设maze(i, j) 表示任一位置。2(对每个位置maze(i, j)可移动的八个方向从正东起顺时针方向顺序为:ESESSWWNWNNE。再用一个二维数组move表示这 八个方向上坐标的增量如下表所示move(v, 1)表示第v个方向上i的增量, move (v, 2)表示第v个方向上j的增量。三、程序流程图四、程序清单:include #include inclu

3、de include include define N 20/*迷宫的大小可改变*/int oldmapN N ;/*递归用的数组,用全局变量节约时间*/ int yes=0;/*yes 是判断是否找到路的标志,1找到0没找到*/ int way100 2, wayn=0; /*way数 组是显示路线用的,wayn是统计走了儿个格子*/void Init (void) ;/*图形初始化*/void Close(void) :/图形关闭*/void DrawPeople(int *x, int *y, int n) ;/*画人匸探索物图*/ void PeopleFind(int (*x) N)

4、 ;/*人匸探索*/void WayCopy(int (*x) N, int (*y) N) ;/*为了 8 个方向的递归把旧迷宫 图拷贝给新数组*/int FindWay(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)

5、 /*主函数*/int mapN N ; /*迷宫数组*/char ch;clrscr ();printf (z,n Please select hand(l) else auton,z) ;/*选择探索方式*/scanf&ch);Init(); /*初始化*/MapRand (map) ;/*生成迷宫*/PrMap (map) ;/*显示迷宫图*/辻仙=1)PeopleFind (map) ;/*人工探索*/elseFindWay (map, 1, 1) ;/*系统自动从下标1, 1的地方开始探索*/Result ();/* 输出结果*/Close ();void Init (void) /

6、*图形初始化*/int gd=DETECT, gm;initgraph(&gd, &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)-;b

7、reak; /*Jb*/case 2: (*x) ; (*y)+;break ;/*右上*/case 3: (*y)+;break; /*右*/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,

8、 100+(*y)*15+6, 50+(*x)*15+6);void PeopleFind(int (*map) N) /*人 12手动査找*/ int x, 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,

9、 250);outtextxy(497, 270, x);line(500, 200, 450, 150);outtextxy(445, 130, q);line(500, 200, 550, 150);outtextxy(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);/*

10、压回车键结束*/ 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();/*接收字符后开始各个方向的探索*/if (c= w &mapx-l y !=1)DrawPeople (&x, &y, 1) ;/*上*/else辻(c二二e &mapx-ly+lj!=1)DrawPeople (&x, &y, 2) ;/*右上*/elseif (c= d &mapx y+lj !=1)DrawPeople

11、 (&x, &y, 3) ;/*右*/else辻(c= c &mapx+l y+1 !=1)DrawPeople (&x, &y, 4) ;/*右下*/else辻(c二二x &mapx+l y !=1)DrawPeople (&x, &y, 5) ;/*下*/else辻(c二二z &mapx+ly-1!=1)DrawPeople (&x, &y, 6) ; /*左下*/elseif (c= a &mapx ylj !=1)DrawPeople (&x, &y, 7) ; /*左*/else if (c=, q &mapx-l y-1 J !=1)DrawPeople (&x, &y, 8) ;

12、 /*左上*/setfillstyle (SOLID_FILL, WHITE) ; /*消去红色探索物恢复原迷宫图*/ bar (100+y*15-6, 50+x*15-6, 100+y*15+6, 50+x*15+6);辻(x=N-2&y=N-2) /*人工控制找成功的话*/yes=l; /*如果成功标志为1*/void WayCopy(int (*oldmap) N, int (*map) N)/*拷贝迷宫数组 */ int i, j;for(i=0;iN;i+)for(j=0;jN;j+)oldmapli j二mapi j ; int FindWay(int (*map) N, int

13、i, int j)/*递归找路*/if (i=N-2&j=N-2) /*走到出 口*/yes二1;/*标志为1,表示成功*/return;mapij j=l ;/*走过的地方变为1*/WayCopy (oldmap, map) ; /*拷贝迷宫图*/if (oldmapi+lZ j+l=0&!yes)/*判断右下方是否可走*/FindWay(oldmap, i+1, j+1);if (yes)/*如果到达出口 了再把值赋给显示路线的way数组,也正是这个原因,所以具体路线是从最后开始保存*/waywaynL0=i;waywayn+l=j;return;WayCopy(oldmap, map);

14、if (oldmapi+l j=0&!yes)/*判断下方是否可以走,如果标志yes已经是1也不用找下去了*/FindWay(oldmap, i+1, j);if(yes)waywayn_0=i;waywayn+l=j;return;WayCopy(oldmap, map);if (oldmapEil j+1 j=0&!yes)/*判断右方是否可以走*/FindWay(oldmap, i, j+1);if(yes)waywaynL0=i;waywayn+l=j;return;WayCopy (oldmap, map);辻(oldmapi-lj jJ=0&!yes)/*判断上方是否可以走*/Fi

15、ndWay(oldmap, i-1,j);辻(yes)waywaynL0=i;waywayn+1二j;return;WayCopy(oldmap, map);if (oldmapi-l j+l=0&!yes)/*判断右上方是否可以走*/FindWay(oldmap, i-1,j+1);if(yes)waywaynL0=i:waywayn+l=j;return;WayCopy(oldmap, map);辻(oldmapi+lZ j-lZ=O&!yes)/*判断左下方是否可以走*/FindWay (oldmap, i+1, j-1);if(yes)waywayn0二i;waywayn+l=j;re

16、turn;WayCopy(oldmap, map);if (oldmapEiZ j-1 j0&!yes)/*判断左方是否可以走*/FindWay (oldmap, i, j-1);辻(yes)waywaynL0=i;waywayn+l=j;return;WayCopy(oldmap, map);辻(oldmapi-l j-l=0&!yes)/*判断左上方是否可以走*/FindWay (oldmap, i-1, j-1);辻(yes)waywaynL0=i;waywayn+l=j;return;return;void Map Rand (i nt (*map) N) /* 开始的随机迷宫图*/

17、int i, j;cleardevice () ;/*清屏*/randomize () ; /*随机数发生器*/for(i=0;iN;i+)for(j=0;jN;j+)if (i=0 I i=N-l I I j=0 I j=N-l)/*最外面一圈为墙壁*/mapliZj二 1;elseif (i=l&j=l : iN-2&JN-2)/*出发点与终点表示为可走的mapliZ j二0;elsemap liZ j二random(2) ;/*其它的随机生成 0 或 1*/void PrMap(int (*map) N)/*输岀迷宫图*/ int i, j;for(i=0;iN;i+)for(j=0;j

18、=0; i)bar(100+wayi1*156, 50+wayi0*156,100+ wayil*15+6, 50+wayi0*15+6);sleep(l) ;/*控制显示时间*/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(GREEN);settextstyle (0, 0, 2) ;/*设置字体大小*/outtextxy(130, 400, Not find a way!);void Result (void)/*结果处理*/ if (yes)/*如果找到*/Find();else/*没找到路*/NotFind ();getch();void Close (void)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论