Lazy loaded image
路径选择策略说明
Words 725Read Time 2 min
2025-5-20

✅ 实现方法总结(功能结构与关键逻辑)

方法功能

  • 将一个“机器人”从当前位置移动到目标位置 (target_Y, target_X)
  • 支持地图“环绕移动”(wrapping),即超出边界后从另一边进入
  • 路径选择策略:选择最短路径,在相等时优先选择环绕方向
  • 记录移动路径 journey_doc 并调用 self.document() 保存日志

方法说

moveto() 方法中,路径选择的本质是在 一个封闭地图(支持边界环绕) 上,从当前位置移动到目标位置,分为两个方向:
  • 水平移动(东西方向)
  • 垂直移动(南北方向)
为了每个方向都选出“最短路径”,通过以下策略进行计算:

✅ 1. 尝试两种方向:

以 X 方向为例(东西方向):
  • 方向一:向西/北方向移动(坐标减一)
    • 每次向左/上走一个单位(用 1,并通过 % max_size 实现环绕)
  • 方向二:向东/南方向移动(坐标加一)
    • 每次向右/下走一个单位(用 +1,也通过 % max_size 实现环绕)

✅ 2. 逐步模拟两个方向的移动,记录路径

  • 同时模拟两个方向的移动过程:
    • 每走一步,就把当前坐标加入到路径中(分别存储在 nw_path[1]es_path[1] 中)
    • 一旦某条路径的终点达到了目标坐标,就停止模拟

✅ 3. 比较路径长度,选择更短的方向

  • 如果某一方向先到达目标位置,就说明那条路径更短,选择这条路径
  • 如果两条路径同时到达目标(等长):
    • 检查北/西方向路径是否发生“环绕”(即从 0 走到最大值),如果发生环绕,就优先选择有环绕的方向
    • 默认东/南方向,如果他们长度一样且北/西接触过0的位子则选择北/西,否则东南。

✅ 举个例子:

假设地图宽度为 5,当前位置 X=4,目标位置 X=1,尝试从 4 走到 1
  • 向东移动路径(+1):
    • 向西移动路径(-1):
      结果:东向路径更短,选择东向
      如果两边都需要两步,但向西方向在移动时绕回了起点(例如从 0 → 4),则代码会优先选择绕回的一边