网页功能: 加入收藏 设为首页 网站搜索  
SLG游戏之路径寻找
发表日期:2006-09-03作者:[转贴] 出处:  

  SLG游戏类的游戏可谓“棋盘式游戏”,如三国志2、4、5,机器人大战,梦幻模拟战等都是典型的SLG游戏。该游戏的一大特点就是:走格子。移动,攻击范围都是以格子为攻击单位。其实SLG游戏的特点远不止这些。在这里,实现一个给出MP(移动力),寻找可达路径程序。先看看我们要达到的效果:<点击放大>
在该地图中,画黄色框的为得到的移动范围。浅绿色的为草地,对NPC MP影响为1,深绿色的为树林,对MP影响为2;灰色的为山地,对MP影响为3;蓝色的为河流,对MP影响为9;这些都是在程序中定义的,可以自行修改。如水军就可以将河流的MP影响设置为1,等等,这涉及到地图机制,现在不加讨论。现在关键的,就是这个移动范围是如何得来的,请继续看。
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111121111111111111
1111111111111111121111111111111
1111111111112211121111111111111
1111111111122222121111111111111
1111111111122111191112111111111
1111111111112121191112119111111
111111111111111b121112199111111
1111111111131111111112991111111
1111111111111333339999911111111
1111111111111131999991111111111
1111111111111111991111111111111
1111111111111111991111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111

为了显示该地图,我定义了一个地图文件,用文本编辑器打开看,它其实是一个数组形式<左表>。
每一个数值对应该点消耗的MP值,绘制地图也是以该表为依据。我将NPC的标记定义为b,看,标记b的点就是NPC人物所处的位置。而经过寻找路径的语句后,要导出一个输出范围表<右表>,该表不仅要反映出NPC可以到达的范围,还要反映到达每点经过的路径。在该表每点数值的含义为:NPC到达该点后剩余的MP点数。实际这就已经指出了到达每一点的最短路径(耗最少MP)。不信,你按照这样的方法:

0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000001100000000000000
0000000000000012200000000000000
0000000000000123310000000000000
0000000000000134421000000000000
0000000000101345532100000000000
0000000001223567603210000000000
0000000012344668704320000000000
0000000123456789865431000000000
0000000012325678765431000000000
0000000001234345430000000000000
0000000000123214000000000000000
0000000000012123000000000000000
0000000000001012000000000000000
0000000000000001000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000

将要到达的点作为当前点,找相邻的4个点中最大数值的点,将该点存如路径数组的第一单元,再以找出的点为当前点,找4个点中不在路径数组中的最大点,如此循环,直到找到数值最大的点为止。这时该路径数组存放的就是到达指定点的最短路径。
要生成该输出范围表,要用到计算机算法的广度优先搜索,我对标准的搜索程序做了一个变形,得到了范围表的生成方案,用文字描叙为:
开始第一轮遍历...
将探索方向值设置为0。
遍历导出序列所有点非0点,依次尝试走方向:左、右、上、下。如果当前点MP值-探索点耗MP值>=0,说明该点可达,查找导出序列,如果存在该点,判断按照从当前点出发计算的MP值是否大于导出序列,如果大于,说明从当前点出发更省MP,将该点加入导出序列,并赋值为当前点MP值-尝试点MP值,并加大探索方向值,探索完所有点后,检查探索方向值,如果探索方向值为0,说明已再无探索点,即已达到最大范围,输出导出序列。
否则进入下一轮遍历。

附具体程序(TC2.0版,编译时需要中文DOS及256色图形系统1.7的支持,147k):
<下载>
256色图形系统可以在“资源放送”栏目下载。

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 SLG游戏之路径寻找
本类热点文章
  A*寻路算法(For 初学者)
  A*寻路初探 GameDev.net
  用有限状态机实现的迷宫求解
  计算机中随机数的产生
  精美的随机数生成器程序
  即时战略游戏中如何协调对象移动
  计算几何算法概览
  飞行射击游戏中的碰撞检测
  电脑AI浅谈
  五子棋算法探讨
  小谈网络游戏同步
  五子棋算法
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00359