游戏机制练习簿:多处补给点到地图格的距离场——6×7地图的三源距离场(案例05)

  • 2026-10-27
  • 1

地图上有多个可用补给点时,每个格子最靠近哪一个点并不总能只凭直觉判断。把最短步数写成一张距离表,可以同时看出服务范围和距离相同的边界。

以下是一组输入完整的独立案例。先读清规则,再按时间或操作顺序记录中间状态;遇到与预期不同的结果时,检查首次出现差异的位置。案例使用明确限定的教学模型,不假定所有作品都采用相同的处理方式。

规则和原始数据

本例为没有障碍的矩形格子地图,只能横竖走,每步代价一;补给点固定并编号。每格记录到最近补给点的步数以及所有并列最近编号,不强行删除平局。

地图6列×7行,三处补给点按编号[(0, 6), (0, 3), (0, 4)]

逐步记录

第0行最近距离[3, 4, 5, 6, 7, 8];对应并列最近编号[[1], [1], [1], [1], [1], [1]],每一列都保留全部平局来源。

第1行最近距离[2, 3, 4, 5, 6, 7];对应并列最近编号[[1], [1], [1], [1], [1], [1]],每一列都保留全部平局来源。

第2行最近距离[1, 2, 3, 4, 5, 6];对应并列最近编号[[1], [1], [1], [1], [1], [1]],每一列都保留全部平局来源。

第3行最近距离[0, 1, 2, 3, 4, 5];对应并列最近编号[[1], [1], [1], [1], [1], [1]],每一列都保留全部平局来源。

第4行最近距离[0, 1, 2, 3, 4, 5];对应并列最近编号[[2], [2], [2], [2], [2], [2]],每一列都保留全部平局来源。

第5行最近距离[1, 2, 3, 4, 5, 6];对应并列最近编号[[0, 2], [0, 2], [0, 2], [0, 2], [0, 2], [0, 2]],每一列都保留全部平局来源。

第6行最近距离[0, 1, 2, 3, 4, 5];对应并列最近编号[[0], [0], [0], [0], [0], [0]],每一列都保留全部平局来源。

补给点0在(0,6),本格最近距离0;检查该位置可以确认距离场的起点没有偏移。

补给点1在(0,3),本格最近距离0;检查该位置可以确认距离场的起点没有偏移。

补给点2在(0,4),本格最近距离0;检查该位置可以确认距离场的起点没有偏移。

共有6个格子出现并列最近来源。

交叉核对与应用

分别从各补给点向四邻格逐层扩散,得到距离后再取最小值,与横纵坐标差绝对值之和比较。地图内相邻格的最近距离差不应超过一。

若地图上增加障碍、单向通道或不同地形代价,坐标差公式可能失效,应使用符合实际移动规则的搜索。这里特意使用无障碍单位代价格,便于把多来源和平局处理单独说明。

建议保留原始输入、每一步状态和最终输出,再只改变一个条件做对照。重点检查空输入、相等边界、重复请求以及先后顺序;把规则约定、计算过程和显示表现分别核对,比只比较最后一个数字更容易找到原因。