Documentation
¶
Overview ¶
Package pathfind 提供网格地图上的 A* 寻路,纯计算、纯标准库、零依赖。
适用:塔防 / SLG / MMO 小地图的自动寻路、怪物追击、点击移动。把地图抽象成 二维网格(Grid),每格可通行或阻挡、可带移动代价(如沼泽更慢);FindPath 返回 从起点到终点的最短路径(格子序列)。
算法:A*(带启发式的最短路),启发函数按是否允许对角移动自动选择—— 四方向用曼哈顿距离,八方向用对角(Chebyshev/octile)距离,保证 admissible (不高估),从而路径最优。开集用最小堆,闭集用 visited 标记。
网格坐标:X 为列、Y 为行,原点 (0,0) 在左上。对角移动默认关闭;开启后默认 禁止"穿墙角"(两侧都是障碍时不允许斜穿),可配置放开。
Grid 构建后若地图不变则并发安全(只读);FindPath 无共享可变状态,可并发调用 同一 Grid。动态改格子(SetBlocked/SetCost)需调用方自行同步。
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Grid ¶
type Grid struct {
// contains filtered or unexported fields
}
Grid 二维网格地图。每格有通行性与移动代价(>=1)。零值不可用,用 NewGrid 构造。
func (*Grid) FindPath ¶
FindPath 求 from 到 to 的最短路径,返回从 from 到 to(含两端)的格子序列。 无路可达返回 nil。from/to 越界或本身阻挡则返回 nil。
func (*Grid) SetBlocked ¶
SetBlocked 设置格子是否阻挡(越界忽略)。
type Option ¶
type Option func(*config)
Option 配置寻路行为。
func WithCutCorner ¶
WithCutCorner 允许"贴墙角斜穿"(默认禁止:对角移动时两侧格子任一阻挡即不可斜穿)。 仅在开启对角移动时有意义。