游戏规则研习:同时移动时的目标冲突(案例03)
多个角色在同一拍提出移动时,依次改坐标可能让先处理的角色获得不公平优势。先根据同一张起始棋盘检查全部提议,再统一决定哪些通过,可以避免顺序影响。
下面给出一组可以从头复算的练习数据。先按约定记录每一步,再比较最后的核对条件;遇到差异时,不急着修改答案,而是先找出从哪一步开始不同。本例描述的是明确限定的游戏规则模型,不代替某款作品自己的说明。
约定与输入
本例禁止进入起始时已被占用的格,即使该角色也打算离开。越界拒绝;多个有效提议争同一空格则全部停留。等待原地不参与争抢,也不允许交换位置。
先排除等待、越界和起始占用,再统计剩余提议的目标重复数;唯一目标通过,其余不动。
A至E起始位置[(2, 4), (2, 3), (3, 0), (3, 3), (4, 1)] N北S南E东W西,点为等待;每组从同一起点独立试算 [['N', '.', '.', 'N', 'S'], ['.', 'W', 'E', 'N', 'N'], ['.', 'W', 'N', 'W', 'S'], ['E', 'S', 'S', 'N', 'N'], ['S', '.', 'S', '.', 'S'], ['N', 'W', 'W', 'E', 'W'], ['N', 'N', 'S', 'W', 'E'], ['E', 'N', 'S', 'E', 'S']]
逐步观察
指令['N', '.', '.', 'N', 'S'],通过的角色为['D', 'E'],结算后按A至E位置[[2, 4], [2, 3], [3, 0], [3, 4], [4, 0]]。
指令['.', 'W', 'E', 'N', 'N'],通过的角色为['B', 'C', 'D', 'E'],结算后按A至E位置[[2, 4], [1, 3], [4, 0], [3, 4], [4, 2]]。
指令['.', 'W', 'N', 'W', 'S'],通过的角色为['B', 'C', 'E'],结算后按A至E位置[[2, 4], [1, 3], [3, 1], [3, 3], [4, 0]]。
指令['E', 'S', 'S', 'N', 'N'],通过的角色为['B', 'E'],结算后按A至E位置[[2, 4], [2, 2], [3, 0], [3, 3], [4, 2]]。
指令['S', '.', 'S', '.', 'S'],通过的角色为['E'],结算后按A至E位置[[2, 4], [2, 3], [3, 0], [3, 3], [4, 0]]。
指令['N', 'W', 'W', 'E', 'W'],通过的角色为['B', 'C', 'D', 'E'],结算后按A至E位置[[2, 4], [1, 3], [2, 0], [4, 3], [3, 1]]。
指令['N', 'N', 'S', 'W', 'E'],通过的角色为[],结算后按A至E位置[[2, 4], [2, 3], [3, 0], [3, 3], [4, 1]]。
指令['E', 'N', 'S', 'E', 'S'],通过的角色为['A', 'D', 'E'],结算后按A至E位置[[3, 4], [2, 3], [3, 0], [4, 3], [4, 0]]。
各组通过数量[2, 4, 3, 2, 1, 4, 0, 3]。
复核办法
每组结算后仍应保持角色数量和位置唯一。交换处理角色的顺序不应改变结果;可先按目标格收集申请,再逐格判断唯一申请者,而不是边走边改占用。
若改成允许跟随别人离开的格子,还需要处理依赖链和交换情况,规则会不同。本例先采用严格的起始占用判断,让冲突结果不依赖处理先后。
把边界、顺序与适用范围写进记录,比只记一个最后数字更有用。可以另外构造刚好在边界、完全没有变化和多个条件同时成立的情况,查看规则是否仍自洽;若要改变设定,保留原案例作为对照,再重新计算受影响的部分。