寻路算法之A*

本文介绍了MOBA游戏中NPC寻路所使用的A*算法。详细讲述了A*算法的数据结构及其实现过程,包括open列表和closed列表的作用,G值、H值与F值的计算方法。此外还给出了算法的初始化步骤、循环过程以及结束条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近接触到MOBA(Multiplayer Online Battle Arena)这个新名词,发现npc寻路有点意思。于是回顾了一下经典的A*算法。

相关数据结构

  1. open列表:记录可用来被寻找的点
  2. closed列表:记录排除在路线之外的点
  3. 对于路线中的一个点:
    3.1 G值:从开始到此点的移动量
    3.2 H值:从此点到终点的估计移动量,一般为不考虑障碍的最短距离。
    3.3 F值:等于G+H,此值的含义是选取当前点的一个评价值,即如果此值越小,表明选此点后,离终点越近。

算法

  1. 初始化
    将起点加入open列表
  2. 循环开始

    1. 从open列表取出一个G+H值最小的点,并将此点加入closed列表

      由于open列表中会有若干个具有同样G+H值的点,为了快速,自己习惯在此引入DFS:优先选取其中G值较大的点

    2. 遍历每一个与此点相通的点:
      如果此点在closed列表中,则跳过;
      如果此点不在open列表中,计算相应的值,并将此点加入open列表;
      如果此点在open列表中,检查如果新的G+H值小于原值,则更新此点的G值与H值;

  3. 结束条件
    直到终点从open列表中挑出。

代码

代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值