✅ 实现方法总结(功能结构与关键逻辑)
方法功能
- 将一个“机器人”从当前位置移动到目标位置
(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
),则代码会优先选择绕回的一边。