迷宫 C语言课程设计
- 格式:doc
- 大小:97.00 KB
- 文档页数:17
经济与管理学院
《C高级语言程序设计》
课程设计报告
(2013/2014学年 第一学期)
学生姓名:
专业班级:
学生学号:
指导教师:
2013年 12 月 23 日
《迷宫》的设计与实现
目录
第一章 课程设计目的和要求.................................1
1.1 目的...............................................1
1.2 要求...............................................1
第二章 课程设计任务内容...................................1
2.1 游戏简介..........................................2 2.2 设计流程...........................................2
第三章 详细设计说明.......................................3
3.1 函数功能说明.......................................3
3.2 参数说明...........................................3
3.3 函数流程图.........................................4
第四章 软件测试方案.......................................7
第五章 软件使用说明......................................12
第六章 课程设计心得与体会................................13
附录一 :参考文献........................................10
附录二 :程序清单........................................11
1 第一章 课程设计的目的与要求
1.1目的
通过本课程设计熟悉《C高级语言程序设计》的程序设计方法以及对“数据结构”的掌握和运用,还有堆栈,文件和指针、变量等初级编程语言的熟练运用,将这些知识进一步的掌握和运用到实践当中。
1)综合运用C高级语言课程和其他选修课程的知识,提高分析和解决实际问题的的能力,进一步巩固、加深和拓宽所学的知识;进一步加强结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。
2)掌握程序设计中的常用算法和C语言的编程技巧和上机调试程序的方法。
3)在实践过程中,提高如何综合运用所学知识解决实际问题的能力.
1.2功能要求
在本次设计中,主要实现以下系统系统功能菜单,主要有11项功能菜单,依次为:
1)打开迷宫文件;
2)保存迷宫文件;
3)设置迷宫系统参数和数据结构;
4)运行迷宫路径搜索;
5)停止迷宫路径搜索;
6)帮助菜单;
7)设置迷宫入口位置(红旗);
8)设置迷宫出口位置(蓝旗);
9)设置迷宫中的障碍物,再次单击取消;
10)消除迷宫中的障碍物;
11)保存迷宫中的障碍物设置;
第二章 课程设计任务内容
2.1游戏简介
本报告主要是运用C++语言,编写一个小型的游戏—迷宫(一人完成)。迷宫的结构布局可自定义设置,骑士从迷宫入口走进迷宫,迷宫中设置很多墙壁,对前进方
2 向形成了多处障碍,骑士需要在迷宫中寻找通路以到达出口。
2.2 设计流程
本次设计将迷宫的结构设计布局设计成由起点(红旗,深色),终点(蓝旗,灰色),围墙(最外一圈),障碍(黑色)和可通过点(空白处,表示可通过)这五部分组成,其中,迷宫起点,终点和障碍物可由玩家自定义设置。
在搜索迷宫时,从起点出发,若遇到围墙或障碍则表示不能通过。只有当下一个路径是可通过的时候,才能继续往下搜索,否则尝试下一个方向。本系统主要使用堆栈的算法,实现了路径试探查询和最快路径查询这两种路径查询方法,包括了四方向和八方向两种路径探寻方向。
为了搜索一条通往终点的路径,玩家从起点开始出发,对途中经过的每一个位置的四个方向进行探索,如果有一个方向可通,既往那个方向前进一步,然后搜索新位置的每个方向,直到搜索到终点为止,若一个位置的四个方向均不通,则返回这个位置的上一个方向,搜索上一个位置的下一个方向的路径。
堆栈算法在迷宫的求解过程主要采用回溯法,即在一定的约束条件下试探地搜索前进若前进中受阻(碰上围墙)或障碍或是已经走过的路......则返回并向下一个方向进行新的搜索。
1)运用堆栈进行搜索时,按照一个既定的方向顺序进行搜索,每搜索到一个可通过点,即将该点的位置压入堆栈,直到探索到终点位置时结束搜索。
2)如果在搜索中发现该方向不通,既尝试下一个方向。
3)如果所有的方向都不通,则表示这个位置是个不可通过点,可以为该点设置一个“脚印”标志,然后将该位置出栈,返回到上一个位置进行它的下一个方向的搜索。
4)最终当堆栈为空时(连起点也出栈了),就表明该迷宫不能出去。当在探索过程中发现了终点,就表明探索到了一个出路。
在此次设计中,主要解决以下几个问题。
1)怎么样表示迷宫的数据结构;
2)怎么样试探方向;
3)复习栈的知识,解决栈的设计问题;
4)如何防止重复到达某点以避免死循环;
第三章 详细设计说明
3 3.1 函数功能说明
本设计中主要调用getNext_stackValidCell()函数实现回溯法搜索路径。
原理:对当前点(nCol,nRow)的nextDirection这个方向进行搜索,如果这个方向没有路径,则继续搜索下一个方向(nextDirection++)
返回值:如果找到终点,则函数返回2,如果找到一个方向的可通点,则返回这个可通过点(nCol,nRow)和从原来那个点到现在这个可通过点的方向(nextDirection).
3.2参数说明
3.2.1 枚举
如果一个变量只有几种可能的值,可以定义为枚举类型。所谓“枚举”是指将变量的值一一列举出来变量的值只能在列举的范围内。
声明枚举类型的一般形式为
enum 枚举类型名{枚举常量列表}
1)表示m_pMazeDate[y][x]的值的具体意义
enum
{MAZE_NORMAL=-1,
MAZE_SELECTED=-2,
MAZE_START=-3,
MAZE_END=-4,
MAZE_WALL=-5,
MAZE_STONE=-6,
MAZE_FOOTMARK=-7,
MAZE_PATH=0,
MAZE_PATH_TOP=1,
MAZE_PATH_RIGHTTOP=2,
MAZE_PATH_RIGHT=3,
MAZE_PATH_RIGHTDOWN=4,
MAZE_PATH_BOTTOM=5,
MAZE_PATH_LEFTBOTTOM=6,
4 MAZE_PATH_LEFT=7,
MAZE_PATH_LEFTTOP=8};
2)八个用来搜索方向
enum
{MAZE_TOP=1,
MAZE_RIGHTTOP=2,
MAZE_RIGHT=3,
MAZE_RIGHTDOWN=4,
MAZE_BOTTOM=5,
MAZE_LEFTBOTTOM=6,
MAZE_LEFT=7,
MAZE_LEFTTOP=8};
3.2.2 宏
可以用#define命令将一个指定的标识符(即宏名)来代表一个字符串。定义宏的作用一般是用一个短的名字代表一个长的字符串。它的一般形式为
#define 标识符 字符串
#define WM_SETTIG_UPDATE 10001 //更新迷宫
#define WM_DEFINE_MAZE 10002 //定义迷宫
3.2.3 逻辑型常量 bool
逻辑型变量要用类型标识符bool来定义,它的值只能是true(为1)和false(为0)之一,由于逻辑型变量用bool来定义,又称为布尔变量。
BOOL m_bShowProcess; //是4方向迷宫还是8方向迷宫
BOOL m_iProcessSpeed; //是否显示搜索过程,如果显示,在搜索过程中将向
视图类发送数据
3.3 函数流程图
5
!m_stackMaze.empty()?
nCurD<=0?
if(this->m_b4Directionon?
nRet==1 ?
oldCurPoint!=this->m-ptStart? (nRet==2?
oldCurPoint!=this->m_ptStart?
oldCurPoint!=this->m-ptStart?
m_bShowProcess?
this->GetCellType(pCur.y,pCu
x=CMaze::MAZEr._START?
this->m_iProcessSpeed!=0?
m_bShowProcess
\
Cpoint pCur=m_stackMaze.top()
nCurD=this->GetCellType(pCur.y,pCur.x)
nCurD+=2 nCurd++
Cpoint oldCurPoint=pCur;
nRet=this->getNextValidCell(pCur.y,pCur.x,nCurD)
this->SetMazeCellType(oldCurPoint.y,oldCurPoint.x,Cmaze::MAZE_PATH+nCurD)
this->m_stackMaze.push(pCur);
ASSERT(FLASE)
this->SetMazeCellType(pCur.y,pCur.x,CMaze::MAZE_PATH) ::SendMessage(m_hViewWnd,WM_MAZEPATH_PROCESS,WPARAM(&pCur),nCurD