A Star 的Lua实现

这篇博客介绍了A*寻路算法的Lua实现,包括CMapNode类的定义、地图节点列表、地图表和NodeList的数据结构,以及AStarPathFind主函数和相关辅助函数的详细实现。作者通过实例展示了如何在Lua中创建和操作这些数据结构,以进行路径搜索。
摘要由CSDN通过智能技术生成

 没有实际应用意义,只是为了熟悉Lua语法和重温下A*

建议使用LuaEdit Copy代码后再看

 

懒,不想排版了..

--
--   A* Lua 实现
--   By Jian
--   Version 1.0
--


-- 常量 --

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

 

--[[

  地图节点
]]
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

-- 绘制函数 --
function CMapNode:DrawChar()
 
 drawChar = nil

 if ( self.iCanPass ) then
  if ( self.iIsInOpenList ) then drawChar = "1 "
  else drawChar = "O " end
 else drawChar = "X " end
 
 return drawChar

end

--[[

  地图表
]]
Map = { n = KMapWid

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值