网站地图>收藏本站>设为首页
定做流程>服务项目>价格参考>付款方式>诚邀加盟>关于本站>联系我们
当前位置:5173毕业设计论文网文章资讯综合频道计算机其他类

基于C语言的迷宫游戏

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2010-10-10 15:46:00
QQ交谈在线咨询详情 5173论文网竭诚为您服务 本站永久域名:www.lw5173.com

二、功能模块结构

2.1功能模块划分

主要分为图形驱动,欢迎画面,初始化迷宫数组,寻找路径,输出迷宫图形,结束画面,图形结束七个模块。这些函数模块各成体系,互不干扰,是系统的主要功能模块。

2.2各个模块的功能

1.      图形驱动函数Init:负责图形界面驱动的初始化。

2.      开始画面函数Welcome:负责生成开始画面。

3.      初始化迷宫数组函数MazeCreat:负责随机生成一个只有一个出口和一个入口的迷宫。

4.      路径寻找函数Path:负责寻找已经生成的迷宫的路径,调用函数TreeCreat生成第一个节点,循环调用函数TreeGrow生成整个树。

其中需要调用:

创建路径搜索树的根节点函数TreeCreat:负责生成搜索树的第一个节点。

路径搜索树的生长函数TreeGrow:负责判断传递给这个函数的节点在四个方向是否可以生成节点,如果可以就调用函数TreeNewPoint生成新节点,并调用函数LeafGrow将新节点增加到待搜索节点中。

在路径搜索树中生成新的节点函数TreeNewPoint:负责在函数TreeGrow所传递来的方向上生成新节点。

搜索树叶子链表的创建与增加函数LeafGrow:负责将新节点增加到待搜索节点链表中。

5.      输出迷宫图形函数Draw:负责将迷宫用图形化界面输出。

6.      结束画面函数GameOver:负责生成结束画面。

7.      图形结束函数Close:负责程序结束后关闭图形界面驱动。

 

 

 

第三章 主要模块的算法说明

3.1程序总体思路

1.      用一个N×N二维数组代表迷宫,所有有关迷宫的操作都在这个二维数组上进行0。在这个数组中,1代表有墙,0代表可以走的路,9代表入口,2代表树已经延伸到的路,5代表最短路径。

2.      首先调用迷宫生成函数MazeCreat,生成一个随机的迷宫并记录在二维数组上0

3.      然后调用Path函数查找迷宫路径。

4.      最后将迷宫用图形输出。

3.2初始化迷宫数组函数MazeCreat

1.      生成迷宫边框,随机选择出入口是在迷宫的上下两边还是左右两边,选择后随即把出入口分到迷宫相对的两条边上,包括出入口位置都随机生成,用inRow,inLine,outRow,outLine这四个变量记录出入口的坐标。

2.      随机生成迷宫内部,具体做法是对迷宫内部每一个点进行随机数判断,当满足条件时把这个点标志为围墙,否则把这个点标记为通路。

3.3寻找路径函数Path

1.      使用两个结构体(treeleaf)来保存这个算法所需要的参数。

2.      由于入口的特殊性,首先调用TreeCreat()函数生成路径搜索树的第一个节点,即树根,并把这个结构体的指针返回。

3.      树根作为第一个节点进入TreeGrow函数,TreeGrow函数判断出第一次生长的方向(有且只有一个方向)并调用函数TreeNewPoint在这个方向上生成新节点,并调用函数LeafGrow将这个新节点增加到待搜索节点链表中。

4.      用指针leafHeadOld指向当前需要判断的节点链表,用指针以leafHeadNow指向下一轮判断中需要判断的节点链表。通过判断待搜索节点链表是否为空来控制循环,当链表为空时说明路径搜索树在上一轮生长过程中没有生长,即已经搜索完迷宫内所有可以到达的节点。

5.      函数TreeNewPoint会在每一次调用时判断新节点是否是出口,如果是将记录出口的结构体的指针赋值给outPoint。在整个路径搜索树生成后,如果outPoint不为初始值NULL说明有路,从出口倒推到入口并将经过的每个迷宫点的值标记为5

6.      因为路径搜索树每次增长都要在所有分支上增长一个节点,故从树根到各个末端所走的路程是相同的,而且只有一个分支可以走到出口,而这条就是最短路径。

7.      TreeCreat的功能是:开辟一个连续的内存空间给结构体tree,然后根据入口坐标判断出唯一的前进方向并在结构体中标志其方向信息为0,不能前进的方向标志为3,最后将这个内存空间的指针返回。
TreeGrow
的功能是:依次判断传递给这个函数的节点的四个方向,如果这个方向可以通行就调用函数TreeNewPoint生成新节点,并把指向新节点的指针传递给函数LeafGrow
TreeNewPoint
的功能是:根据函数TreeGrow传递来的方向生成新节点,并TreeGrow传递来父节点指针赋值给新节点的father
LeafGrow
的功能是:将函数TreeNewPoint传递来的新节点的指针加入到链表中,如果链表为空则创建链表。

 

3.4 路径树的节点结构体

struct tree
  {int row;  
/*用于记录该节点的行坐标*/
   int line;  /*用于记录该节点的列坐标*/
   int infoUp;    /*用于记录各个方向的属性*/
   int infoDown;  /*初始值为0,父节点方向为1*/
   int infoLeft;   /*有下一个节点为2*/
   int infoRight; /*没有下一个节点为3*/
   struct tree *father;    /*用于指向其父节点,初始值为NULL*/
  };

各个结构体成员的用途:

1)      每个点的坐标(int row, int line;用来表示这个点的坐标);

2)      各个方向的属性(int infoUP, int infoDown, int infoLeft,int infoRigh;用来记录该节点在四个方向的情况,初始值为0,父节点方向为1,有下一个节点为2,没有下一个节点为3);

3)      指向父节点的指针(struct tree *father;用来指向父节点,以便在完成整个迷宫路径搜索后倒推出最短路径)。

最后这个结构体各节点构成的是一个树,这个树除了根节点外每个节点都有一个指向其父节点的指针。而这棵树的所有节点将遍布从出口开始迷宫内可以到达每一个节点,最后通过出口处的节点向上遍历到根节点完成最短路径的标记。

待搜索节点结构体

struct leaf
  {struct tree *point;
/*指向新的树节点的指针*/
   struct leaf *next;  /*指向链表下一个节点的指针*/
  };/*待搜索节点的链表*/

结构体成员的用途:

1)      处于同一路径长度的路径树一个节点的指针(struct tree *point);

2)      链表下一个节点的指针(struct leaf *next);

最后这个结构体的各个节点将构成一个链表,路径长度每增长一次将创建一个新的链表以存储处于同一路径长度的路径树的节点的指针。而路径数的增长将挨个判断(调用TreeGrow函数)上一次存储的处于同一路径长度的路径树节点。


以上内容只是毕业设计作品的部分资料介绍,如果了解更多详情请联系客服QQ:57510459
     购买帮助>>

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论