湖南商学院
软件综合课程设计
题
目
随机生成的迷宫小游戏
学生姓名
学
学
号
院
专业班级
指导教师
职
称
康思思
150910068
计算机与信息工程学院
电信 1502
梁英
教授
计 算 机 与 信 息 工 程 学 院
2017 年 7 月
湖 南 商 学 院 课 程 设 计
课程设计(实习)评审表
姓 名
康思思
学 院
计信学院
学 号
150910068
专业班级
电信 1502
题 目
随机生成的迷宫小游戏
评
审
意
见
评审成绩
指导教师签名
职称
评审时间
年 月 日
湖 南 商 学 院 课 程 设 计
课程设计(实习)作品验收表
题目
随机生成的迷宫小游戏
姓 名
康思思
参与人员
班 级
学 号
设计任务与要求:
电信 1502
150910068
喻盼
电信 1502
150910065
1. 一条通路的二元组(i, j)数据序列,(i, j)表示通路上某一点的坐标。
2. 用一种标志(如数字 8)在二维数组中标出该条通路,并在屏幕上输出二维数组。
3. 可以利用一个二维数组 maze[i][j]表示迷宫,其中 1<=i<=m,1<=j<=n。数组元素值为 0 表示
该位置是墙壁,不能通行;元素值为 1 表示该位置是通路。假定从 maze[1][1]出发,出口位
于 maze[m][n],移动方向可以是 8 个方向(东,东南,南,西南,西,西北,北和东北。
作品完成情况:
运行软件后,能很好的完成任务和要求,能对做的题目实行正确的回答,能满足
所出的题目要求,简单明了,且程序能人性化的提醒题目需求。
验收情况:
注:1. 除“验收情况”栏外,其余各栏均由学生在作品验收前填写。
2. “验收情况”栏由验收小组按实际验收的情况如实填写。
验收教师签名:___________
年 月 日
湖 南 商 学 院 课 程 设 计
目录
1 设计任务与要求 ......................................... 1
1.1 设计任务 .......................................... 1
1.2 问题分析 ......................................... 1
2 总体设计 ............................................... 2
3 详细设计 ............................................... 4
3.1 生成迷宫 .......................................... 4
3.2 显示迷宫 .......................................... 5
3.3 人工探索 .......................................... 7
4 系统测试结果 .......................................... 8
4.1 显示迷宫地图 ...................................... 8
4.2 正确走出迷宫后 .................................. 9
5 课程设计总结 ........................................... 9
6 参考文献 .............................................. 10
附录 .................................................... 10
湖 南 商 学 院 课 程 设 计
随机生成的迷宫小游戏
1 设计任务与要求
1.1 设计任务
迷宫实验是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无
顶大盒子的门放入,在盒子中设置了许多墙,对行进方向形成了多处阻挡。盒子
仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。
对同一只老鼠重复进行上述实验,一直到老鼠从入口到出口,而不走错一步。老
鼠经过多次试验终于得到它学习走通迷宫的路线。设计一个计算机程序对任意设
定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
(1)一条通路的二元组(i, j)数据序列,(i, j)表示通路上某一点的坐标。
(2)用一种标志(如数字 8)在二维数组中标出该条通路,并在屏幕上输
出二维数组。
(3)可以利用一个二维数组 maze[i][j]表示迷宫,其中 1<=i<=m,1<=j<=n。
数组元素值为 1 表示该位置是墙壁,不能通行;元素值为 0 表示该位置是通路。
假定从 maze[1][1]出发,出口位于 maze[m][n],移动方向可以是 8 个方向(东,
东南,南,西南,西,西北,北和东北。
1.2 问题分析
这个简单的迷宫游戏使用二维数组来模拟迷宫,将迷宫的左上角作入口,右
下角作出口,求出从入口点到出口点的一条通路,作为线性结构的典型应用,大
多用非递归方法实现。用“!”来模拟小人,通过'q', 'w', 'e', 'a', 'd', 'z', 'x', 'c',来控
制小人的上下左右共八个方向的运动。生成迷宫是在 0 和 1 中生成随机数,1 代
表可走,0 代表墙。迷宫的大小为 N×N,N 预定义为常数,修改 N 的值可以改
变迷宫的大小,只要不超过屏幕显示范围,而程序不必做修改。
这个程序主要的部分就是判断要走的下一步是不是符合一些要求,即:是否
有出界,是否走的位置是墙,是否到达终点。这部分在函数 peoplefind()中实现
1
湖 南 商 学 院 课 程 设 计
的,只用到了一个 switch 语句。做到这些函数也就写出来了,就是有些不足,
比如说生成的迷宫不一定走得通。
2 总体设计
第一个模块—主函数 main()的功能是:选定后调用迷宫生成函数,接着调用
迷迷宫显示函数,然后调用人工探索函数,探索完毕进行结果处理,最后关闭系
统,程序结束。
第二个模块—迷宫生成函数 maprand()的功能是:用数组 g 表示一个迷宫,要
随
机生成迷宫,数组元素的值利用随机函数生成 0 或 1 的数。
第四个模块—迷宫显示函数 prmap()的功能:根据数组 g 的值输出迷宫图,
利用两重循环语句可以完成迷宫图的显示。
第六个模块—人工探索 peoplefind()的功能:首先输出迷宫图以及人工控制
操作图示,探索物!出现在左上角,采用人工控制 8 个方向的移动,由于是 8
个方向,用光标键只能控制 4 个方向,为了统一采用了临近的 8 个字符 Q W
E A D Z X C 代表 8 个方向,按了字符后,对应方向不是墙壁,可以
将探索物!移到相应的位置,按回车表示结果人工操作。由于探索物不停的移动,
要在新位置显示,可以调用 switch(a) &x,&y,n 完成参数 x 和 y 代表所在的行
坐标和列坐标,a 代表所选的方向,根据 a 的值,将 x 和 y 进行相应的变化。如果
此时 g 数组元素的坐标是出口则探索成功,否则失败。
程序框图如下图 1:
2
湖 南 商 学 院 课 程 设 计
开始
预定义
主函数 main()
随机生成迷宫
maprand()
调用人工探索 peoplefind()
根据用户命令更新地图
是否到达右下
角?
N
Y
Y
游戏胜利
图 1 程序框图
3
湖 南 商 学 院 课 程 设 计
3 详细设计
3.1 生成迷宫
迷宫地图用一个二维数组 m[N][N](N=100)来存放。
流程图如图 2:
开始
定义函数
For 循环 i,j
确定 g[i][j]的表达式
结束
图 2 生成迷宫程序流程图
程序如下:
void maprand()
{
srand(time(NULL));
for (int i=0; i