:
《数据结构之走迷宫》
课程设计报告
专 业: 计算机科学技术与网络工程类
班 级: 计网
064
班
姓 名: 罗旻婧
指导教师: 李静滨
1
二 00 八年 5 月 15 日
目 录
1.课程设计目的…………………………………………………3
2.课程设计题目描述和要求……………………………………3
3.课程设计报告内容…………………………………………….3
3.1 需求分析…………………………………………………3
3.2 详细设计………………………………………………….3
3.3 测试和结果分析…………………………………………18
4.总结…………………………………………………………....18
2
1.课程设计目的
通过典型实例——迷宫问题,加深对算法的理解和编制,掌握数组的应用。
2.课程设计题目描述和要求
【问题描述】程序开始运行时显示一个迷宫地图,迷宫中央有一个游侠,迷宫的右下方有
一个宝物箱。你的任务是使用键盘上的方向键操纵游侠在规定的时间内走到宝物箱处。
【设计要求】
(1)使用图形化界面;游侠的形象可辨认,可用键盘操纵游侠上下左右移动。
(2)游侠尚未学会穿墙术。
(3)正确检测结果,显示游侠走到宝物箱处所用的时间
(4)显示出走出迷宫的路径。
3.课程设计报告内容
3.1 需求分析
程序首先要考虑迷宫的表示,这是一个二维关系图,典型的存储方式是选择
二维数组,数组元素的值只有两种状态,所以取值为 0 或 1,0 表示通路,1 表
示墙壁。图形的显示就可以根据数组元素的值来定。如果是人工探索,则根据
按键来确定小人的坐标位置,利用循环语句即可实现。如果是系统自动探索,
则问题相对复杂,在此我采用递归的方法实现。
(1)main() 主函数
首先确定是人工探索还是系统自动探索,通过输入字符选定。选定后调
用图形初始化函数,根据输入字符调用人工探索函数或自动探索函数。探索完
毕进行结果处理,最后关闭图形系统,程序结束。
(2)initgraph()初始化函数
由于迷宫是在图形方式下显示的,所以要进行图形初始化工作。
(3)makebg()迷宫生成函数
用数组**表示一个迷宫。将最外面一层设为墙壁,作成一个封闭图形,
只留下入口点和出口点为通路。
(4)drawbg()迷宫显示函数
根据数组 bg 的值输出迷宫图,用 rect()填充,一个数组元素对应一
个矩形块。
(5)drawman()小人显示函数
用 x,y 代表小人的坐标,并绘制小人。
3.2 详细设计
3
# include<graphics.h>
# include<stdio.h>
# include<stdlib.h>
# include<dos.h>
# include<time.h>
# include<conio.h>
# de%ne N 19
# de%ne M 20
int bg[M][N];
void makebg(int,int);
void drawbg(int[][N],int,int,int,int,int);
void drawman(int,int,int);
void rect(int,int,int,int);
int main(void )
{
char ch,ch2;
int step,len,size,direc,x,y,i,j,t_4,t_3,t_2,t_1;
struct time t1,t2;
int gdriver,gmode;
gdriver=DETECT;
initgraph(&gdriver,&gmode,"c:\\tc");
Startgame:
step=20;
len=10;
size=20;
x=0;
y=0;
i=0;
4
j=0;
setcolor(12);
settextstyle(1,0,1);
gotoxy(60,3);
printf("Welcome! ");
gotoxy(60,6);
printf("Please choose: ");
gotoxy(60,9);
printf("S: start ");
gotoxy(60,12);
printf("C:computer ");
gotoxy(60,15);
printf("Q: quit ");
setcolor(11);
settextstyle(1,0,1);
outtextxy(400,350," This game is designed");
outtextxy(400,370," by luoMinjing,");
outtextxy(400,390," class064.0607100423");
outtextxy(50,420," I Love ms 4ever !");
setcolor(13);
makebg(M,N);
setbkcolor(LIGHTBLUE);
setwritemode(XOR_PUT);
settextstyle(1,0,3);
setcolor(GREEN);
set%llstyle(LINE_FILL,RED);
drawbg(bg,M,N,size,0,0);
setcolor(WHITE);
5