佛山市南海区桂城街道桂澜北路2号亿能国际广场2座511-B室(住所申报) 13706130838 jinnian@baidu.ag

新闻中心

游戏知识推演:斜向走格时如何避免穿过墙角——起点(2,2)的八邻格检查(记录06)

2026-10-25

允许斜着走一格之后,地图中两面墙夹出的角落会带来新的规则问题。如果只检查目的格为空,角色可能从两个被堵住的正交方向之间挤过去。

下面是一份输入完整的独立练习。先明确规则和端点约定,再逐项推演;可以遮住计算结果自行记录,出现差异时从第一处不同查起。每项输入都是本例设定,不代表所有游戏采用同一套规则。

本例规则与输入

本例采用严格防穿角规则:目标在地图内且为空;斜向移动时,起点旁的两个正交邻格也都必须为空。这里只检查一步,不求最短路线,八个方向的耗时不参与计算。

六行六列,原点在左上,起点[2, 2] ..#.#. ###... ..S... ...... .#..## ..#.#.

过程记录

方向(-1,-1)到(1,1):目标格可用False,两侧正交格同时可用False,因此拒绝这一步。

方向(0,-1)到(2,1):目标格可用False,属于正交移动,无额外穿角检查,因此拒绝这一步。

方向(1,-1)到(3,1):目标格可用True,两侧正交格同时可用False,因此拒绝这一步。

方向(-1,0)到(1,2):目标格可用True,属于正交移动,无额外穿角检查,因此允许这一步。

方向(1,0)到(3,2):目标格可用True,属于正交移动,无额外穿角检查,因此允许这一步。

方向(-1,1)到(1,3):目标格可用True,两侧正交格同时可用True,因此允许这一步。

方向(0,1)到(2,3):目标格可用True,属于正交移动,无额外穿角检查,因此允许这一步。

方向(1,1)到(3,3):目标格可用True,两侧正交格同时可用True,因此允许这一步。

八个方向中允许5个,其余均有明确阻挡条件。

复核与实际应用

把斜向一步拆成横向与纵向相邻格检查,再与目标格检查合并。检查的是可通过条件,并不意味着角色真的按两步移动;采用其他穿角规则的作品可能得到不同结果。

把墙角检查加在目的格之外,会改变可通行图,不能只在视觉动画中临时补一个绕行动作。如果后续做寻路,应让寻路与实际移动使用相同的邻接规则,避免路线能规划却走不通。

练习结束后,保留输入、每一步的中间状态和最终结果。可以仅修改一个边界输入,再比较变化来自哪条规则;不要同时改动多个条件后只凭最终画面判断。若实际作品表现不同,应先确认它使用的时间、坐标或结算约定,再决定是否属于异常。