公司动态

游戏界面与规则实验:地图编辑器的撤销与重做(独立例13)

2026-10-19

本篇用一组独立的虚构记录研究地图编辑器的撤销与重做。先规定输入和边界,再逐步推演结果;所有规则都为练习而设,不代表某个真实产品的默认实现。你可以先遮住答案,用纸记录中间状态,再比较第一处产生分歧的位置,而不只看最终结论。

机制与注意点

撤销会把最近一次操作转入可重做记录,重做再将它恢复。撤销后执行新的编辑通常会建立新的分支,因此旧的重做路线需要按约定处理。

本例用整数地块高度表示编辑状态;新编辑清空重做记录。没有可撤销或重做的操作时保持原状,不能自行补造一个历史状态。

明确规则与输入

编辑先把当前高度压入撤销栈,再改变高度并清空重做栈。撤销把当前高度压入重做栈再取撤销栈末尾,重做反过来;空栈操作无效。

初始高度4,操作加3,重做,撤销,加3,加3,减1,重做,加2,减1,撤销,减1,撤销,加2,减1,加2,减1

逐步核对记录

加3后高度7,可撤销状态[4],可重做状态[];列表末尾是下一次取用处。

重做后高度7,可撤销状态[4],可重做状态[];列表末尾是下一次取用处。

撤销后高度4,可撤销状态[],可重做状态[7];列表末尾是下一次取用处。

加3后高度7,可撤销状态[4],可重做状态[];列表末尾是下一次取用处。

加3后高度10,可撤销状态[4, 7],可重做状态[];列表末尾是下一次取用处。

减1后高度9,可撤销状态[4, 7, 10],可重做状态[];列表末尾是下一次取用处。

重做后高度9,可撤销状态[4, 7, 10],可重做状态[];列表末尾是下一次取用处。

加2后高度11,可撤销状态[4, 7, 10, 9],可重做状态[];列表末尾是下一次取用处。

减1后高度10,可撤销状态[4, 7, 10, 9, 11],可重做状态[];列表末尾是下一次取用处。

撤销后高度11,可撤销状态[4, 7, 10, 9],可重做状态[10];列表末尾是下一次取用处。

减1后高度10,可撤销状态[4, 7, 10, 9, 11],可重做状态[];列表末尾是下一次取用处。

撤销后高度11,可撤销状态[4, 7, 10, 9],可重做状态[10];列表末尾是下一次取用处。

加2后高度13,可撤销状态[4, 7, 10, 9, 11],可重做状态[];列表末尾是下一次取用处。

减1后高度12,可撤销状态[4, 7, 10, 9, 11, 13],可重做状态[];列表末尾是下一次取用处。

加2后高度14,可撤销状态[4, 7, 10, 9, 11, 13, 12],可重做状态[];列表末尾是下一次取用处。

减1后高度13,可撤销状态[4, 7, 10, 9, 11, 13, 12, 14],可重做状态[];列表末尾是下一次取用处。

结果及另一种检查

最终高度13,撤销栈[4, 7, 10, 9, 11, 13, 12, 14],重做栈[]。

另一种表示是维护一条状态历史及当前位置。撤销向左一步,重做向右一步;新编辑删除当前位置右侧分支再追加新状态。把两种表示每一步对照,可以发现误保留重做分支的问题。

自己动手复盘

复核时把数据、判断条件和更新后的状态分开写。相等边界、编号从零还是从一开始、先筛选还是先排序,都可能造成看似微小却会延续到后续步骤的差别。不要为了让最后数字吻合而跳过中间错误;先找到第一处不同,再按同一规则重新推演。

进一步练习只改变一项输入,例如一个边界值、一个标签或一次操作,先预测受影响的部分,再计算新结果。把不受影响的部分也记录下来,能更清楚地看出规则的作用范围。应用到真实游戏前,先核对其帮助说明或在可重复场景中验证条件,避免把本例的虚构约定当成通用标准。