游戏规则观察课:格子建筑的地基支撑逐层传递——19格建筑的地基变化(练习01)
游戏中的建筑稳定规则可以被设计成明确的格子依赖关系。一个格子虽然与其他格子挨着,却未必满足给定的向下支撑条件;移走地基后也可能影响多层结构。
下面使用独立的一组输入,逐步记录规则如何产生结果。建议先自行推演,再寻找与记录第一次不同的位置;检查时间单位、端点归属和处理顺序。所有约定均限定在本例中,其他作品采用不同实现并不自动意味着出错。
本例约定与输入
这是虚构游戏规则,不是现实结构计算。最底行占用格视为有支撑;上方占用格只要正下、左下或右下有一个已支撑格就有支撑。按自下而上计算,比较移除指定底行格前后结果。
纵坐标0为最底层 占用格[(0, 0), (0, 1), (0, 3), (1, 0), (1, 1), (1, 4), (2, 0), (2, 1), (2, 2), (2, 4), (3, 0), (3, 3), (3, 4), (4, 0), (4, 2), (4, 3), (4, 4), (5, 1), (5, 3)] 移除底行格[(0, 0), (1, 0)]
过程与结果
第0层原有格[0, 1, 2, 3, 4],原支撑格[0, 1, 2, 3, 4];移除后剩余格[2, 3, 4],现支撑格[2, 3, 4]。
第1层原有格[0, 1, 2, 5],原支撑格[0, 1, 2, 5];移除后剩余格[0, 1, 2, 5],现支撑格[1, 2, 5]。
第2层原有格[2, 4],原支撑格[2, 4];移除后剩余格[2, 4],现支撑格[2, 4]。
第3层原有格[0, 3, 4, 5],原支撑格[3, 4, 5];移除后剩余格[0, 3, 4, 5],现支撑格[3, 4, 5]。
第4层原有格[1, 2, 3, 4],原支撑格[2, 3, 4];移除后剩余格[1, 2, 3, 4],现支撑格[2, 3, 4]。
格(0,1)可用下层支撑位置[],因此当前无支撑。
格(0,3)可用下层支撑位置[],因此当前无支撑。
格(1,1)可用下层支撑位置[(2, 0)],因此当前有支撑。
格(1,4)可用下层支撑位置[],因此当前无支撑。
格(2,1)可用下层支撑位置[(2, 0), (3, 0)],因此当前有支撑。
格(2,2)可用下层支撑位置[(1, 1), (2, 1)],因此当前有支撑。
格(2,4)可用下层支撑位置[(3, 3)],因此当前有支撑。
格(3,3)可用下层支撑位置[(2, 2), (4, 2)],因此当前有支撑。
格(3,4)可用下层支撑位置[(3, 3), (4, 3)],因此当前有支撑。
格(4,2)可用下层支撑位置[(5, 1)],因此当前有支撑。
格(4,3)可用下层支撑位置[(4, 2)],因此当前有支撑。
格(4,4)可用下层支撑位置[(3, 3), (4, 3), (5, 3)],因此当前有支撑。
格(5,1)可用下层支撑位置[(4, 0)],因此当前有支撑。
格(5,3)可用下层支撑位置[(4, 2)],因此当前有支撑。
除直接移除的2格外,另有1个原本有支撑的格失去支撑:[(0, 1)]。
如何独立复核
从剩余地基出发,沿允许的向上边逐层遍历,与逐行判定比较。被移除格与仍存在但失去支撑的格子分别列出,不能把两类数量混在一起。
本例只重新标记支撑状态,不额外模拟掉落、冲击或侧向连接强度。真实建筑不能用这套虚构规则判断安全;在游戏中也需要先确认设计采用的依赖关系是否相同。
测试时保留原始数据与中间状态,再只改变一个条件作比较。先检查空状态、相等边界、重复输入和最后一步,再比较整体结果;不要为了让最后的数字相同而跳过前面已经出现的差异。明确规则后,复核才有可以重复的依据。
