游戏规则观察:横竖视线与中间障碍(练习14)
观察者与目标排在同一行或同一列,并不代表它一定能看见目标。还要比较距离,并检查两点之间的每个格子。把方向、射程和遮挡分开记录,能找出失败的具体原因。
以下是为了练习规则阅读而设计的独立场景。所有输入在这里完整列出,可以先自己记录结果,再对照后面的计算。它不声称对应某款现成游戏;如果实际说明中的边界或处理顺序不同,应以该说明重新演算。
条件与输入
这里是自定义棋盘练习,只允许横竖观察,障碍完全不透明。目标本身所在格不是障碍,射程端点计入;斜方向即使很近也不算可见。
只接受同一行或列且距离不超过射程的目标;沿途任意障碍阻断视线。
观察点[3, 2],射程6格,棋盘坐标0至8 障碍[(2, 6), (7, 7), (7, 4), (1, 3), (7, 6), (4, 6), (6, 2), (1, 2), (4, 1)] 目标[(0, 2), (8, 2), (3, 0), (3, 8), (3, 6), (3, 5), (6, 3), (7, 3)]
逐项复盘
目标(0,2):横竖对齐为是,距离3格,中间障碍[[1, 2]];判定不可见。
目标(8,2):横竖对齐为是,距离5格,中间障碍[[6, 2]];判定不可见。
目标(3,0):横竖对齐为是,距离2格,中间障碍[];判定可见。
目标(3,8):横竖对齐为是,距离6格,中间障碍[];判定可见。
目标(3,6):横竖对齐为是,距离4格,中间障碍[];判定可见。
目标(3,5):横竖对齐为是,距离3格,中间障碍[];判定可见。
目标(6,3):横竖对齐为否,距离4格,中间障碍[];判定不可见。
目标(7,3):横竖对齐为否,距离5格,中间障碍[];判定不可见。
可见目标编号为[3, 4, 5, 6]。
如何自行核对
复核时从观察点沿一个方向逐格走,先遇到墙就停,超出射程也停。与直接计算整条线段相比,这种走格子的方法更容易发现把墙后目标误算进来的问题。
把射程增加一格,只应影响原本因为距离不足的目标;不会让斜方向或墙后的目标突然可见。
练习时保留原输入,只改一处条件,再观察哪些结果发生变化。若结果与预期不同,先查编号起点、边界是否包含以及前一步留下的状态。这样的记录能把“感觉不对”变成可复现的问题,也更方便向同伴说明自己的判断依据。