游戏引擎最短路径搜索方法、游戏引擎系统的制作方法

文档序号:6624220阅读:357来源:国知局
游戏引擎最短路径搜索方法、游戏引擎系统的制作方法
【专利摘要】本发明揭示了一种游戏引擎最短路径搜索方法及游戏引擎系统,最短路径搜索方法包括如下步骤:第一步:把起始点添加到Open表;第二步:考察Open表:2l)如果Open表为空,则寻路失败;寻找Open表中f值最低的节点作为当前节点,并把它移入Closed表中,转向第三步;22)如果当前点为终点,则寻路成功,转向第四步;第三步:对相邻的8个方向的每个节点进行相应操作;第四步:保存路径;根据Closed表以及父节点表提供的信息,由目标节点开始,根据其父指针向后回溯,从而得到一条源点到目标节点的路径。本发明提出的游戏引擎最短路径搜索方法,可提高搜索效率及精确地。本发明通过增加一个父节点表避免走弯路的现象,保证最优路径的提取。
【专利说明】游戏引擎最短路径搜索方法、游戏引擎系统

【技术领域】
[0001]本发明属于计算机软件及游戏【技术领域】,涉及一种路径搜索方法,尤其涉及一种游戏引擎最短路径搜索方法;同时,本发明还揭示一种利用了上述最短路径搜索方法的游戏引擎系统。

【背景技术】
[0002]现代的计算机游戏通过综合图形的、物理的和人工智能的方法来达到游戏的真实感。真实感游戏体验是很难确切定义其内涵的,但一般来说,这通常指游戏的沉浸感以及游戏中出现的非玩家角色的智能性。过去几年中,游戏中的图形技术和物理特性模拟技术都取得了很大的进展。实际上,图形开发包,如Maya和3DsMax带来的令人瞳目的图形已经是一件普通的事了。物理特性模拟开发包,如Havok可以使开发人员创造出完全真实的世界。但是,对图形技术和物理特性模拟技术的应用已经不足使一个游戏具有独特性了。所以,游戏开发人员需要寻找使自己游戏进一步异化的创新。因为游戏人工智能没有像图形技术和物理模拟技术那样取得巨大的发展,所以它提供了一个游戏创新和异化的空间。
[0003]现有的路径搜索算法主要有解析算法和启发式算法两种,分别以Dijkstra算法和A*算法作为两类算法的典型。由于解析算法在计算速度、规模等方面的局限性,随着计算机运行速度的提高,启发式算法逐渐发展成为路径搜索算法的核心,除了 A*算法以外,国内外研究者还在此基础上逐渐发展了许多其它智能算法,包括IDA*算法、D*算法等,它们的基本原理都借鉴了 A*算法中的估价函数思想。目前,游戏业界的标准是使用A*算法或IDA*算法,A*算法一般要快一些,而IDA算法则比A*算法要使用更少的内存。
[0004]有鉴于此,如今迫切需要设计一种新的游戏路径搜索方法,以便克服现有搜索方法的上述缺陷。


【发明内容】

[0005]本发明所要解决的技术问题是:提供一种游戏引擎最短路径搜索方法,可提高搜索效率及精确度。
[0006]此外,本发明还提供一种利用了上述最短路径搜索方法的游戏引擎系统,可提高游戏引擎系统中搜索效率及精确度。
[0007]为解决上述技术问题,本发明采用如下技术方案:
[0008]一种游戏引擎最短路径搜索方法,所述方法包括如下步骤:
[0009]第一步:把起始点添加到Open表;
[0010]第二步:考察Open表:
[0011]21)如果Open表为空,则寻路失败;寻找Open表中f值最低的节点作为当前节点,并把它移入Closed表中,转向第三步;
[0012]22)如果当前点为终点,则寻路成功,转向第四步;
[0013]第三步:对相邻的8个方向的每个节点进行如下操作;
[0014]31)如果该节点不可通过或者已经在Closed表中,略过;
[0015]32)如果该节点不在Open表中,把它添加进去,并把该节点的父指针指向当前节点,并记录它的f值,g值和h值;f值即f (η),为结点η的估价函数;g值即g (η),为状态空间中从初始点到η结点的实际代价;h值即h(n),为从η到目标节点最佳路径的估计代价;
[0016]33)如果该节点已经在Open表中,用g值作为参考检查新的路径是否更好,即有更低的g值;如果是这样,把这个节点的父节点改成当前点,并且重新计算该点的g和f值;
[0017]34)如果8个方向检查完毕,则转向第二步;否则,转向第三步;
[0018]第四步:保存路径;根据Closed表以及父节点表提供的信息,由目标节点开始,根据其父指针向后回溯,从而得到一条源点到目标节点的路径。
[0019]作为本发明的一种优选实施方式,所述游戏引擎系统包括:地图编辑器、消息处理系统、场景显示及行走系统;
[0020]所述地图编辑器用以制作的场景所需要的图块的排列顺序;
[0021]所述消息处理系统用以等待消息,然后根据收到的消息转到相应的函数进行处理;
[0022]所述场景显示及行走系统包括背景显示模块、行走模块、事件发生模块;所述背景显示模块用以在程序运行后,先读取地图编辑器制作的场景所需要的图块的排列顺序,按照排列顺序将图象拼成一个完整的场景;所述行走模块用以控制角色在场景中行走;所述行走模块包括最短路径搜索单元,用以搜索让人物从目前的位置走到目标位置应该走最短的路径;所述事件发生模块用以把相应事件的序号存储在地图的某些格子中,当主角一踏入这个格子就会触发对应事件。
[0023]一种游戏引擎系统,所述游戏引擎系统包括:地图编辑器、消息处理系统、场景显示及行走系统;
[0024]所述地图编辑器用以制作的场景所需要的图块的排列顺序;
[0025]所述消息处理系统用以等待消息,然后根据收到的消息转到相应的函数进行处理;
[0026]所述场景显示及行走系统包括背景显示模块、行走模块、事件发生模块;
[0027]所述背景显示模块用以在程序运行后,先读取地图编辑器制作的场景所需要的图块的排列顺序,按照排列顺序将图象拼成一个完整的场景;
[0028]所述行走模块用以控制角色在场景中行走;所述行走模块包括最短路径搜索单元,用以搜索让人物从目前的位置走到目标位置应该走最短的路径;
[0029]所述事件发生模块用以把相应事件的序号存储在地图的某些格子中,当主角一踏入这个格子就会触发对应事件;
[0030]所述最短路径搜索单元的最短路径搜索方法包括如下步骤:
[0031]第一步:把起始点添加到Open表;
[0032]第二步:考察Open表:
[0033]21)如果Open表为空,则寻路失败;寻找Open表中f值最低的节点作为当前节点,并把它移入Closed表中,转向第三步;
[0034]22)如果当前点为终点,则寻路成功,转向第四步;
[0035]第三步:对相邻的8个方向的每个节点进行如下操作;
[0036]31)如果该节点不可通过或者已经在Closed表中,略过;
[0037]32)如果该节点不在Open表中,把它添加进去,并把该节点的父指针指向当前节点,并记录它的f值、g值和h值;f值即f (η),为结点η的估价函数;g值即g (η),为状态空间中从初始点到η结点的实际代价;h值即h(n),为从η到目标节点最佳路径的估计代价;
[0038]33)如果该节点已经在Open表中,用g值作为参考检查新的路径是否更好,即有更低的g值;如果是这样,把这个节点的父节点改成当前点,并且重新计算该点的g和f值;
[0039]34)如果8个方向检查完毕,则转向第二步;否则,转向第三步;
[0040]第四步:保存路径;根据Closed表以及父节点表提供的信息,由目标节点开始,根据其父指针向后回溯,从而得到一条源点到目标节点的路径。
[0041]作为本发明的一种优选实施方式,所述地图编辑器用以制定一个场景构成文件的格式,在这个文件里记录构成场景所需要的图块的排列顺序,为每个图块建立索引,记录各个场景需要的索引信息。
[0042]作为本发明的一种优选实施方式,一个场景包括:地面,建筑和植物,家具摆设,和在场景中活动的人物或者物体;所述背景显示模块用以按照一定的顺序把它们依次显示到屏幕上,就形成了一个丰富多采的场景。
[0043]作为本发明的一种优选实施方式,所述背景显示模块在内存中开辟一到两个屏幕缓存区,事先把即将显示的图象数据准备在缓存区内,然后一次性把它们传送到真正的屏幕缓冲区内。
[0044]作为本发明的一种优选实施方式,游戏用到的图片事先制作好并存于设定的图形文件中;地图编辑器制作的场景文件仅仅是对应的索引数据,而不是真正的图片;在游戏中生成场景就是地图编辑的逆过程,地图编辑是根据场景生成数据,而生成场景是根据数据生成场景。
[0045]作为本发明的一种优选实施方式,所述行走模块至少设定上、下、左、右四个行走方向,每个方向4幅图,包括站立、迈左腿、迈右腿、迈左腿;
[0046]控制主角位置不动而使场景移动,即采用滚屏技术来实现角色在场景上移动;这样角色一直保持在屏幕的正中间,需要做的工作只是根据行走方向和步伐不停变换图片;
[0047]同时需要判断行走时是否有不可跨越的障碍物;用一个二维数组来对应一个场景,每一个数组值代表场景的一小格;有障碍的地方,该数组的对应值为1,可通过的地方的值为O。
[0048]作为本发明的一种优选实施方式,所述游戏引擎系统还包括打斗系统,用以控制角色打斗,在一场战斗结束后,主角的经验值都会增加;而当经验值到达一定程度时,角色就升级了。
[0049]本发明的有益效果在于:本发明提出的游戏引擎系统及其最短路径搜索方法,可提高搜索效率及精确地。本发明通过增加一个父节点表避免走弯路的现象,保证最优路径的提取,为每个节点增加一个父指针,并不去改变A*算法的搜索过程,只是在当前节点搜索到下一个距离目标最近的节点时,把该节点加入Closed表中,并把该节点的父指针指向当前节点。最终,对照Closed表,由目标点通过其父节点逐步回溯,即可达到最初点,从而可以得到一个最优路径。

【专利附图】

【附图说明】
[0050]图1为包含障碍物的地图。
[0051]图2为一个带有障碍物的地图。
[0052]图3为一个带障碍物地图的表示图。
[0053]图4为一个包含弯路的地图。
[0054]图5为本发明方法的流程图。

【具体实施方式】
[0055]下面结合附图详细说明本发明的优选实施例。
[0056]实施例一
[0057]寻路问题是游戏开发领域最著名的理论问题,业界有大量的文献资料涵盖了这问题的方方面面。这是因为,寻路问题并不仅仅表现在计算机科学领域,在机器人、数据挖掘和自动化技术等领域同样广泛存在。
[0058]在游戏中,地图接近于现实。在大多数情况下,地图是指用来表示游戏环境的图形。我们一般使用规则的网格图,以特定的比例或分辨率来表示地图,其中每个节点对应地图中的一个点。如果地图中有两个点是相连的,那就在图形中用一条边来表示这两个节点。一般来讲,每一条边都有一个关联的开销,表示通过这个节点所要付出的代价。
[0059]如图1,灰色区域表示障碍物,空白区域表示可以通过。假设从A点能够到达B点,就把这种情况表示为:Cost [Edge (A, B)]彡η,其中η是地图中节点的数量,Edge (A, B)表示A和B两个节点之间的一条路径。如果两个点不是相连通的,就把这种情况表示为Cos[tEdg(eA, B)] > η。
[0060]图2、图3给出了一个带障碍物的地图以及它的网格表示图。可以这样假设,如果对于一条特定的边,其相关的开销〉η(地图中节点的数量),那么在表示地图的图形中,那个圆弧边就不用再画出来了,代表这一点是不可通过的,也就是游戏中的障碍物。当然,这里只是为了方便讨论,把每对相通的节点之间的开销当做1,不相通节点的开销就赋值一个大于η的数。实际的游戏中,开销并不是通过η来判断的,每一条弧的值都可能会根据实际情况来赋值。
[0061]首先,将问题域定义为一个连通图,其中节点表示位置,而承受开销的边则表示在这些位置之间的移动开销。
[0062]本发明主要讨论在连通图中的寻路问题。寻路问题就是给定某两个节点或者更多的节点,根据实际问题的需要,找到一种有效的方法在给定的搜索空间中找出一条最能满足需要的路径。目前,在游戏路径搜索中用来解决该问题的主要是Α*算法。
[0063]在该问题域中执行Α*算法,需要下列几个参数:起始节点、目标节点、启发式估价函数,以及主题移动条件。对连通图的遍历过程从起始节点开始,到达目标节点就算是完成。启发式估算函数表示的是从当前位置到达目标节点剩余开销的估算值。主题移动条件,代表着主体在节点之间的移动能力,反过来也表示着节点阻挡主体移动的能力。在连接图的遍历过程中,需要考虑这个能力,因为遍历逻辑需要忽略那些移动受阻的节点。
[0064]标准的Α*算法利用Closed表存储搜索过程信息,最终进行逆向提取,从而得到搜索路径。当走到一条死路时需要返回,并重新选择一条路径,那么原来这些被考察的节点也被存储在Closed表中。所以,找到目标节点后,算法根据Closed表逆向进行路径提取时,那些走弯路的点亦被包含进去,最终所得到的路径并不是最优的。
[0065]图4给出了一个10*10的地图,黑色区域代表障碍物,空白区域表示可以通过。图中S处代表开始节点,D处代表目标节点,要求利用标准的A*算法进行路径搜索,找到一条从S到D的最优路径。采用C语言处理的话,把地图当成矩阵来读取,那么S的位置就是(1,0),D的位置就是(8,8)。
[0066]为了简便,不失一般性,我们假设对每个节点进行垂直和水平四个方向的搜索。A*算法的估价函数f (n) = g(n)+h(n),其中,h(n)采用曼哈顿距离,即两点之间垂直方向和水平方向距离之和。这里假设每两个相通的节点之间的开销为I。
[0067]h(n) = IX-X' HY-Y'
[0068]其中,X代表目标节点在地图中的横坐标,Y代表目标节点在地图中的纵坐标-X代表当前节点在地图中的横坐标,V代表当前节点在地图中的纵坐标。
[0069]标准A*算法路径搜索的过程如下:
[0070]首先,把节点(1,0)放进Open表中,此时Open表中只有这一个点,它即是表中f值最低的节点,并把它放进Closed表中"因为S点并不是我们要找的目标点,所以进行第三步操作,对它周围的四个邻接点进行A*搜索操作。
[0071]由地图2、图3可知,节点s有三个相邻节点(0,0),(2,0),(1,1)。其中,节点(1,I)不可通过,则略过;节点(0,0),(2,0)可以通过,把它们添加到Open表中,并一记录它们的g值和f值。相邻节点都己经检查完毕,则返回第二步。
[0072]然后,重复第二步操作,检查f值最小的节点。节点(2,0)对应的g、h及f值为:g = Lh= I 2-8 I+ I 0-8 I = 14, f = g+h = 15。节点(0,0)对应的 g、h 及 f 值为:g = I,h = I 0-8 I+ I 0-8 I = 16, f = g+h = 17。可知,节点(2,0)是Open表中f值最小的那个点,把该点放入Closed表中并作为当前节点继续进行搜索操作,如此反复。
[0073]最后,路径搜索到节点(8,2),由于其相邻节点不可通过或者己经放入closed表中,略过;此时,需要重新判断Open表中的其他节点,并选出f值最小的节点作为当前节点继续搜索操作。通过计算可以得到节点(5,I)是符合条件的点,以此作为当前节点,其相邻的节点(5,0)和(6,I)己在Closed表中,略过;(5,2)是障碍物,不可通过,略过;节点(4,I)己经在Open表中,需要重新计算f值的大小,并跟原来的f值进行比较,可知,f的值比原来的要大,并不是最好的路径,也应该略过。此时,我们继续检查Open表,并重新查找f值最小的节点。同样的方法,可以得到节点(4,1),没有满足条件的相邻节点,继续回溯,此时Open表中只剩下一个节点(0,0),放入Closed表中,重新进行寻路操作。
[0074]最终,可以达到目标点(8,8),寻路成功。根据Closed表中节点的信息,进行反向提取,就可以得到一条从起始节点到目标节点的路径。
[0075]由上面的分析可以看出,从S出发,一直向下走,最终走到一条死路,然后返回,重新选择一条路径,并最终找到目标节点。而这些弯路的节点也被包含到Closed表中,当我们利用Closed表进行路径提取的时候,这些节点也被包含在路径上,造成走弯路的现象,增大了路径开销。
[0076]由于路径的提取是根据Closed表中的节点进行回溯,从而得到的。上面的分析可以看出,当路径中存在死路的时候,标准的A*算法并不能得到最优路径。本发明通过增加一个父节点表避免走弯路的现象,保证最优路径的提取"为每个节点增加一个父指针,并不去改变A*算法的搜索过程,只是在当前节点搜索到下一个距离目标最近的节点时,把该节点加入Closed表中,并把该节点的父指针指向当前节点。最终,对照Closed表,由目标点通过其父节点逐步回溯,即可达到最初点,从而可以得到一个最优路径。
[0077]游戏引擎最短路径搜索方法的流程如图5所示,具体包括如下步骤:
[0078]【第一步】把起始点添加到Open表。
[0079]【第二步】考察Open表
[0080]I)如果Open表为空,则寻路失败;寻找Open表中f值最低的节点作为当前节点,并把它移入Closed表中。
[0081]2)如果当前点为终点,则寻路成功,转向第四步。
[0082]【第三步】对相邻的8个方向的每个节点进行如下操作
[0083]I)如果该节点不可通过或者已经在Closed表中,略过。
[0084]2)如果该节点不在Open表中,把它添加进去,并把该节点的父指针指向当前节点,并记录它的f,g和h值。其中,f值即f (η),为结点η的估价函数;g值即g(η),为状态空间中从初始点到η结点的实际代价;h值即h(n),为从η到目标节点最佳路径的估计代价。
[0085]3)如果该节点已经在Open表中,用g值作为参考检查新的路径是否更好,即有更低的g值。如果是这样,把这个节点的父节点改成当前点,并且重新计算该点的g和f值。
[0086]4)如果8个方向检查完毕,则转向第二步;否则,转向第三步。
[0087]【第四步】保存路径。根据Closed表以及父节点表提供的信息,由目标节点开始,根据其父指针向后回溯,从而得到一条源点到目标节点的路径。
[0088]本实施例中,所述游戏引擎系统包括:地图编辑器、消息处理系统、场景显示及行走系统;
[0089]所述地图编辑器用以制作的场景所需要的图块的排列顺序;
[0090]所述消息处理系统用以等待消息,然后根据收到的消息转到相应的函数进行处理;
[0091]所述场景显示及行走系统包括背景显示模块、行走模块、事件发生模块;所述背景显示模块用以在程序运行后,先读取地图编辑器制作的场景所需要的图块的排列顺序,按照排列顺序将图象拼成一个完整的场景;所述行走模块用以控制角色在场景中行走;所述行走模块包括最短路径搜索单元,用以搜索让人物从目前的位置走到目标位置应该走最短的路径;所述事件发生模块用以把相应事件的序号存储在地图的某些格子中,当主角一踏入这个格子就会触发对应事件。
[0092]实施例二
[0093]游戏引擎是一个为运行某一类游戏的机器设计的能够被机器识别的代码(指令)集合。它像一个发动机,控制着游戏的运行。一个游戏作品可以分为游戏引擎和游戏资源两大部分。游戏资源包括图象,声音,动画等部分,列一个公式就是:游戏=引擎(程序代码)+资源(图象,声音,动画等)。游戏引擎则是按游戏设计的要求顺序的调用这些资源。
[0094]游戏的具体制作
[0095]1.地图编辑器的制作
[0096]游戏往往要有大量的场景,场景中根据需要可以有草地,湖泊,树木,房屋,家具等道俱,由于一个游戏需要很多场景且地图越来越大,为了节省空间,提高图象文件的可重用性,游戏的画面采用很多重复的单元(可以叫做“图块”)所构成的,这就要用到地图编辑器了。我们在制作游戏引擎前,要完成地图编辑器的制作。在游戏里,场景的构成,是图块排列顺序的记录。首先制定一个场景构成文件的格式,在这个文件里记录构成场景所需要的图块的排列顺序,因为我们已经为每个图块建立了索引,所以只需要记录这些索引就可以了。一个场景的构成,是分成几层来完成的:地面,建筑和植物,家具摆设,和在场景中活动的人物或者物体(比如飘扬的旗帜),按照一定的顺序把它们依次显示到屏幕上,就形成了一个丰富多采的场景。
[0097]2.游戏的模块的划分
[0098]游戏按功能分为:消息处理系统、场景显示及行走系统、打斗系统三大主要部分。其中又以消息处理系统为核心模块,其余部分紧紧围绕它运行。
[0099]一消息处理系统
[0100]消息处理系统是游戏的核心部分。游戏用到的消息处理系统先等待消息,然后根据收到的消息转到相应的函数进行处理。比如:主角碰到敌人后,我们就让程序产生‘打斗消息’,消息处理系统收到这个消息后就会马上转到打斗模块中去。
[0101]二场景显示及行走系统
[0102]作为游戏,其所有事件的发生几乎都是和场景有关,例如:不同的地方会碰到不同的敌人、与不同的人对话得知不同的事情等。鉴于这部分的重要性,我们可再将它划分为:背景显示、行走和事件发生三个子模块,分别处理各自的功能。下面进行具体分析。
[0103](一)背景显示
[0104]程序运行后,先读取前面地图编辑器制作的场景所需要的图块的排列顺序,按照排列顺序将图象拼成一个完整的场景,一般做法是:在内存中开辟一到两个屏幕缓存区,事先把即将显示的图象数据准备在缓存区内,然后一次性搬家:把它们传送到真正的屏幕缓冲区内。
[0105]游戏用到的图片则事先制作好并存于另外的图形文件中。地图编辑器制作的场景文件仅仅是对应的数据,而不是真正的图片。在游戏中生成场景就是地图编辑的逆过程,一个是根据场景生成数据,而另一个是根据数据生成场景。
[0106](二)行走
[0107]要让主角在场景中行走,至少要有上、下、左、右四个行走方向,每个方向4幅图(站立、迈左腿、迈右腿、迈左腿),我们让主角位置不动,而使场景移动,即采用滚屏技术来实现角色在场景上移动。这样角色一直保持在屏幕的正中间,需要做的工作只是根据行走方向和步伐不停变换图片而已。行走时的障碍物判断也是每一个场景中必定要有的,有一些道具如树木、房屋等是不可跨越的。对此我主要用一个二维数组来对应一个场景,每一个数组值代表场景的一小格。有障碍的地方,该数组的对应值为1,可通过的地方的值为O。在许多游戏中要用鼠标控制人物运动,而且让人物从目前的位置走到目标位置应该走最短的路径。这就要用到最短路径搜索算法即A*算法了。
[0108](三)事件发生
[0109]事件发生原理就是把相应事件的序号存储在地图的某些格子中,当主角一踏入这个格子就会触发对应事件。
[0110]三打斗系统
[0111]绝大多数的游戏都是有战斗存在的,因此,打斗系统就成为系统中很重要的一环。有不少游戏采用回合制打斗方式,因为实现起来较为简单。和打斗紧密相关的是升级,通常在一场战斗结束后,主角的经验值都会增加。而当经验值到达一定程度时,角色就升级了。
[0112]综上,本发明还揭示一种游戏引擎系统,所述游戏引擎系统包括:地图编辑器、消息处理系统、场景显示及行走系统。
[0113]所述地图编辑器用以制作的场景所需要的图块的排列顺序;所述消息处理系统用以等待消息,然后根据收到的消息转到相应的函数进行处理;所述场景显示及行走系统包括背景显示模块、行走模块、事件发生模块。
[0114]所述背景显示模块用以在程序运行后,先读取地图编辑器制作的场景所需要的图块的排列顺序,按照排列顺序将图象拼成一个完整的场景;所述行走模块用以控制角色在场景中行走;所述行走模块包括最短路径搜索单元,用以搜索让人物从目前的位置走到目标位置应该走最短的路径;所述事件发生模块用以把相应事件的序号存储在地图的某些格子中,当主角一踏入这个格子就会触发对应事件。
[0115]所述最短路径搜索单元的最短路径搜索方法包括如下步骤:
[0116]第一步:把起始点添加到Open表;
[0117]第二步:考察Open表:
[0118]21)如果Open表为空,则寻路失败;寻找Open表中f值最低的节点作为当前节点,并把它移入Closed表中,转向第三步;
[0119]22)如果当前点为终点,则寻路成功,转向第四步;
[0120]第三步:对相邻的8个方向的每个节点进行如下操作;
[0121]31)如果该节点不可通过或者已经在Closed表中,略过;
[0122]32)如果该节点不在Open表中,把它添加进去,并把该节点的父指针指向当前节点,并记录它的f值、g值和h值;f值即f (η),为结点η的估价函数;g值即g(n),为状态空间中从初始点到η结点的实际代价;h值即h(n),为从η到目标节点最佳路径的估计代价;
[0123]33)如果该节点已经在Open表中,用g值作为参考检查新的路径是否更好,即有更低的g值;如果是这样,把这个节点的父节点改成当前点,并且重新计算该点的g和f值;
[0124]34)如果8个方向检查完毕,则转向第二步;否则,转向第三步;
[0125]第四步:保存路径;根据Closed表以及父节点表提供的信息,由目标节点开始,根据其父指针向后回溯,从而得到一条源点到目标节点的路径。
[0126]综上所述,本发明提出的游戏引擎最短路径搜索方法,可提高搜索效率及精确地。本发明通过增加一个父节点表避免走弯路的现象,保证最优路径的提取,为每个节点增加一个父指针,并不去改变A*算法的搜索过程,只是在当前节点搜索到下一个距离目标最近的节点时,把该节点加入Closed表中,并把该节点的父指针指向当前节点。最终,对照Closed表,由目标点通过其父节点逐步回溯,即可达到最初点,从而可以得到一个最优路径。
[0127]这里本发明的描述和应用是说明性的,并非想将本发明的范围限制在上述实施例中。这里所披露的实施例的变形和改变是可能的,对于那些本领域的普通技术人员来说实施例的替换和等效的各种部件是公知的。本领域技术人员应该清楚的是,在不脱离本发明的精神或本质特征的情况下,本发明可以以其它形式、结构、布置、比例,以及用其它组件、材料和部件来实现。在不脱离本发明范围和精神的情况下,可以对这里所披露的实施例进行其它变形和改变。
【权利要求】
1.一种游戏引擎最短路径搜索方法,其特征在于,所述方法包括如下步骤: 第一步:把起始点添加到Open表; 第二步:考察Open表: 21)如果Open表为空,则寻路失败;寻找Open表中f值最低的节点作为当前节点,并把它移入Closed表中,转向第三步; 22)如果当前点为终点,则寻路成功,转向第四步; 第三步:对相邻的8个方向的每个节点进行如下操作; 31)如果该节点不可通过或者已经在Closed表中,略过; 32)如果该节点不在Open表中,把它添加进去,并把该节点的父指针指向当前节点,并记录它的f值、g值和h值;f值即f (η),为结点η的估价函数;g值即g(η),为状态空间中从初始点到η结点的实际代价;h值即h (η),为从η到目标节点最佳路径的估计代价; 33)如果该节点已经在Open表中,用g值作为参考检查新的路径是否更好,即有更低的g值;如果是这样,把这个节点的父节点改成当前点,并且重新计算该点的g和f值; 34)如果8个方向检查完毕,则转向第二步;否则,转向第三步; 第四步:保存路径;根据Closed表以及父节点表提供的信息,由目标节点开始,根据其父指针向后回溯,从而得到一条源点到目标节点的路径。
2.根据权利要求1所述的游戏引擎最短路径搜索方法,其特征在于: 所述游戏引擎系统包括:地图编辑器、消息处理系统、场景显示及行走系统; 所述地图编辑器用以制作的场景所需要的图块的排列顺序; 所述消息处理系统用以等待消息,然后根据收到的消息转到相应的函数进行处理; 所述场景显示及行走系统包括背景显示模块、行走模块、事件发生模块;所述背景显示模块用以在程序运行后,先读取地图编辑器制作的场景所需要的图块的排列顺序,按照排列顺序将图象拼成一个完整的场景;所述行走模块用以控制角色在场景中行走;所述行走模块包括最短路径搜索单元,用以搜索让人物从目前的位置走到目标位置应该走最短的路径;所述事件发生模块用以把相应事件的序号存储在地图的某些格子中,当主角一踏入这个格子就会触发对应事件。
3.一种游戏引擎系统,其特征在于,所述游戏引擎系统包括:地图编辑器、消息处理系统、场景显示及行走系统; 所述地图编辑器用以制作的场景所需要的图块的排列顺序; 所述消息处理系统用以等待消息,然后根据收到的消息转到相应的函数进行处理; 所述场景显示及行走系统包括背景显示模块、行走模块、事件发生模块; 所述背景显示模块用以在程序运行后,先读取地图编辑器制作的场景所需要的图块的排列顺序,按照排列顺序将图象拼成一个完整的场景; 所述行走模块用以控制角色在场景中行走;所述行走模块包括最短路径搜索单元,用以搜索让人物从目前的位置走到目标位置应该走最短的路径; 所述事件发生模块用以把相应事件的序号存储在地图的某些格子中,当主角一踏入这个格子就会触发对应事件; 所述最短路径搜索单元的最短路径搜索方法包括如下步骤: 第一步:把起始点添加到Open表; 第二步:考察Open表: 21)如果Open表为空,则寻路失败;寻找Open表中f值最低的节点作为当前节点,并把它移入Closed表中,转向第三步; 22)如果当前点为终点,则寻路成功,转向第四步; 第三步:对相邻的8个方向的每个节点进行如下操作; 31)如果该节点不可通过或者已经在Closed表中,略过; 32)如果该节点不在Open表中,把它添加进去,并把该节点的父指针指向当前节点,并记录它的f值、g值和h值;f值即f (η),为结点η的估价函数;g值即g(η),为状态空间中从初始点到η结点的实际代价;h值即h (η),为从η到目标节点最佳路径的估计代价; 33)如果该节点已经在Open表中,用g值作为参考检查新的路径是否更好,即有更低的g值;如果是这样,把这个节点的父节点改成当前点,并且重新计算该点的g和f值; 34)如果8个方向检查完毕,则转向第二步;否则,转向第三步; 第四步:保存路径;根据Closed表以及父节点表提供的信息,由目标节点开始,根据其父指针向后回溯,从而得到一条源点到目标节点的路径。
4.根据权利要求3所述的游戏引擎系统,其特征在于: 所述地图编辑器用以制定一个场景构成文件的格式,在这个文件里记录构成场景所需要的图块的排列顺序,为每个图块建立索引,记录各个场景需要的索引信息。
5.根据权利要求3所述的游戏引擎系统,其特征在于: 一个场景包括:地面,建筑和植物,家具摆设,和在场景中活动的人物或者物体;所述背景显示模块用以按照一定的顺序把它们依次显示到屏幕上,就形成了一个丰富多采的场旦-5^ O
6.根据权利要求3所述的游戏引擎系统,其特征在于: 所述背景显示模块在内存中开辟一到两个屏幕缓存区,事先把即将显示的图象数据准备在缓存区内,然后一次性把它们传送到真正的屏幕缓冲区内。
7.根据权利要求6所述的游戏引擎系统,其特征在于: 游戏用到的图片事先制作好并存于设定的图形文件中;地图编辑器制作的场景文件仅仅是对应的索引数据,而不是真正的图片;在游戏中生成场景就是地图编辑的逆过程,地图编辑是根据场景生成数据,而生成场景是根据数据生成场景。
8.根据权利要求3所述的游戏引擎系统,其特征在于: 所述行走模块至少设定上、下、左、右四个行走方向,每个方向4幅图,包括站立、迈左腿、迈右腿、迈左腿; 控制主角位置不动而使场景移动,即采用滚屏技术来实现角色在场景上移动;这样角色一直保持在屏幕的正中间,需要做的工作只是根据行走方向和步伐不停变换图片; 同时需要判断行走时是否有不可跨越的障碍物;用一个二维数组来对应一个场景,每一个数组值代表场景的一小格;有障碍的地方,该数组的对应值为1,可通过的地方的值为O0
9.根据权利要求3所述的游戏引擎系统,其特征在于: 所述游戏引擎系统还包括打斗系统,用以控制角色打斗,在一场战斗结束后,主角的经验值都会增加;而当经验值到达一定程度时,角色就升级了。
【文档编号】G06F17/30GK104199878SQ201410414456
【公开日】2014年12月10日 申请日期:2014年8月21日 优先权日:2014年8月21日
【发明者】李保印 申请人:西安闻泰电子科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1