Silverlight.XNA(C#)跨平台3D游戏研发手记:(二)四叉树遍历与人工智能A*算法在SLG移动路径范围测算中的应用

本文介绍了如何在2D SLG游戏中利用四叉树遍历算法计算角色移动范围,并结合A*算法实现寻路。通过四向延展循环遍历,判断地形和机动力消耗来确定可移动区域。在移动到目标位置时,A*算法提供路径规划。手记强调了四叉树算法在SLG游戏中的重要性和A*算法的性能考虑。
摘要由CSDN通过智能技术生成
 

除战斗范围设定外,说到SLG中最有趣而经典的算法莫过于角色可移动范围的测算与寻路。当前成熟的SLG商业游戏中,以《火焰纹章》、《高级大战争》等系列新作为代表,它们在传统的基础上将可移动范围进行了拓展,组合上攻击范围并配合移动指向路径箭头,使得整场战局每个“棋子”的操控感受和趣味性都无与伦比。

SLG角色移动从程序设计的角度可大致分为3个步骤:

1)呈现可移动路径范围

2)确定移动目的地单元格

3)沿着路径移动到目的地

以四向为基础的Silverlight 2D SLG游戏,我们首先想到的当然是采用四叉树遍历算法来实现其中的角色可移动路径范围测算。

不要被它的行头所吓到,其实它只是一种很简单的四向延展循环遍历,我们不妨先来看下图:

每个角色以其所处的格子(坐标)为中心,第一步可移动的格子只有:北、东、南、西;那么要测算其可移动范围,首先得分析周围这4个格子角色是否可以移动到,其中判断的依据有地形矩阵边界、机动力极限(或四叉树深度)以及地形机动力消耗等元素;如果判断为可行,则将此格子进行标记(存储进可移动范围List<Point>表中);接下来再以同样的步骤,分别以这些被标记过的格子为中心,继续四向延伸遍历 (以减去当前单元格机动力消耗为基础);额外的,此时除了判断是否可以移动外,还需判断子节点是否有效(List中是否存在重复,Path是否回头等逻辑)。于是,最终我们可以得出类似如下算法:

 

        /// <summary>
        /// 显示可移动范围路径
        /// </summary>
        public void ShowPathRange(Sprite sprite) {
            sprite.PathRange.Clear();
            ClearAllRange();
            Dictionary<Point2D, int> rangeList = new Dictionary<Point2D, int>();
            Dictionary&l
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值