C语言课程设计-迷宫游戏.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机技术基础课程设计 C语言 设计报告 题目:完整的二维迷宫游戏 学院:工商管理学院 专业:信息系统与信息管理 班级:050507 姓名:孙月 指导教师:张首伟 设计日期:2004年12月10日 题目:完整的二维迷宫游戏 一、选题背景: 问题的提出:我们在玩迷宫游戏的时候,常常在过了一关之后就结束了,这里设计的迷宫游戏足够多,难以程度也不尽相同,可以过瘾的玩。模仿的有那么一点意思,还请多多指教! 二、设计思想:  (1).问题描述 用一个m行n列的二维数组来表示迷宫。数组中每个元素的取值为0或1,其中值0表示 通路,值1表示阻塞,入口在左上方(1,1)处,出口在右下方(m,n)处,如图所示。要求求出从迷宫入口到出口有无通路,若有通路则指出其中一条通路的路径,即输出找到通路的迷宫数组,其中通路上的“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的增量。 三、程序流程图 四、程序清单: 一、 二、 #include graphics.h #include stdlib.h #include stdio.h #include conio.h #include dos.h #define N 20/*迷宫的大小,可改变*/ int??oldmap[N][N];/*递归用的数组,用全局变量节约时间*/ int??yes=0;/*yes是判断是否找到路的标志,1找到,0没找到*/ int??way[100][2],wayn=0;/*way数组是显示路线用的,wayn是统计走了几个格子*/ void Init(void);/*图形初始化*/ void Close(void);/*图形关闭*/ void DrawPeople(int *x,int *y,int n);/*画人工探索物图*/ void PeopleFind(int (*x)[N]);/*人工探索*/ 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)/*主函数*/ { ? ?int map[N][N]; /*迷宫数组*/ ? ?char ch; ? ?clrscr(); ? ?printf(\n Please select hand(1) else auto\n);/*选择探索方式*/ ? ?scanf(%c,ch); ? ?Init();??/*初始化*/ ? ?MapRand(map);/*生成迷宫*/ ? ?PrMap(map);/*显示迷宫图*/ ? ?if(ch==1) ? ?? ?PeopleFind(map);/*人工探索*/ ? ?else ? ?? ?FindWay(map,1,1);/*系统自动从下标1,1的地方开始探索*/ ? ?Result();/*输出结果*/ ? ?Close(); } void Init(void)/*图形初始化*/ { ? ?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)--;break; /*上*/ ? ?? ?case 2:

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档