lua实现A星最短路径算法

该博客介绍了如何使用Lua实现A*最短路径算法。首先,它提到了A*算法的基本原理,并推荐了一个JavaScript实现的教程作为了解A*算法的起点。接着,博主分享了如何将网上找到的四方向寻路的Lua代码修改为支持八方向寻路的实现过程。
摘要由CSDN通过智能技术生成

参考博客 http://blog.csdn.net/lufy_legend/article/details/5733733

这个博客地址上对A*算法的原理解释的还是蛮清楚的,并且用js实现了。对于对A星不了解的同学这个博客可以先扫一下盲。

知道了A* 原理之后我们就用lua来实现拉

代码是在网上找了一个lua实现的四个方向的寻路再根据上面博客的思路修改为八个方向的寻路 

--
--   A* Lua 实现
--   By Jian
--   Version 1.0
--   modiy by steven

module("AStarQuery", package.seeall)

-- 常量 FindWay中设置--

KMapWidth = 0              -- 地图的宽度(节点数)
KMapHeight = 0            -- 地图的高度(节点数)

--[[

  地图节点
]]
CMapNode =
{
  iX = 0 ,                 -- 在地图中的 X 坐标
  iY = 0 ,                 -- 在地图中的 Y 坐标
  iIndex = 0 ,             -- 在一维地图数组中的下标

  iFCost = 0 ,             -- A Star 算法中的 F 耗费
  -- iGCost = 0 ,             -- A Star 算法中的 G 耗费
  -- iHCost = 0 ,             -- A Star 算法中的 H 耗费

  iIsInOpenList = false ,  -- 该节点是否在 开放列表 中
  iIsInCloseList = false , -- 该节点是否在 关闭列表 中

  iParent = nil ,          -- 使用A Star 求路径过程中存储父节点
  iNext = nil ,            -- 在openList 和 closeList 中指向下一个元素

  iCanPass = true          -- 该节点是否是可通过节点
}

-- 构造函数 --
function CMapNode:new( aIndex )

  if ( aIndex == nil ) then
    error( " the Index Can't be nil " ) end

  ret = object or {}
  self.__index = self
  setmetatable(ret, self)
  ret.iX = aIndex - math.floor( aIndex / KMapWidth) * KMapWidth  -- 求余、未知 % 为什么报错,数学库也打开了
  ret.iY = ( aIndex - ret.iX ) / KMapWidth    -- Lua 得出的商是浮点数
  ret.iIndex = aIndex
  return ret
end
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值