本篇用一份独立的虚构游戏记录练习持续时间的刷新与延长。先按规则预测最后状态,再逐行对照运算,可以找出差异究竟来自输入、边界条件,还是结算先后。下面所有数值都只服务于这一道练习。
先读清楚本例规则
每次触发提供6秒状态。刷新规则直接把结束点设为当前时刻加6;延长规则在尚有剩余时把6加到旧结束点,已结束则从当前时刻重新计。
触发时刻(秒):0,6,8,14,20,21,29
为何这样记录
再次获得同一种状态时,刷新计时和累计剩余时间是不同机制。相同的触发记录,套用不同规则,最后结束的时刻可能相差很多。
本例分别维护两条独立时间轴。状态在结束时刻本身已经失效;新触发不会把已经过去的空档补算为有效时间。
逐步演算
第1次在0秒触发:刷新规则把结束点0改为6;延长规则取当前时刻0与旧结束点0中的较大值,再加6,得到6。
第2次在6秒触发:刷新规则把结束点6改为12;延长规则取当前时刻6与旧结束点6中的较大值,再加6,得到12。
第3次在8秒触发:刷新规则把结束点12改为14;延长规则取当前时刻8与旧结束点12中的较大值,再加6,得到18。
第4次在14秒触发:刷新规则把结束点14改为20;延长规则取当前时刻14与旧结束点18中的较大值,再加6,得到24。
第5次在20秒触发:刷新规则把结束点20改为26;延长规则取当前时刻20与旧结束点24中的较大值,再加6,得到30。
第6次在21秒触发:刷新规则把结束点26改为27;延长规则取当前时刻21与旧结束点30中的较大值,再加6,得到36。
第7次在29秒触发:刷新规则把结束点27改为35;延长规则取当前时刻29与旧结束点36中的较大值,再加6,得到42。
结果与交叉核对
最后一次触发后,刷新版本到35秒结束,延长版本到42秒结束,相差7秒。
从最后触发时刻29看,两种规则剩余时间分别是6秒和13秒。要比较剩余时间,必须减掉同一个观察时刻,不能直接把结束点当成持续长度。
自己怎样练习
自己复核时,可以把纸分成“操作前状态、这一条输入、操作后状态”三栏。先遮住解答完成一遍,再只查找第一次出现分歧的位置;后面的错误往往只是前一步状态传递的结果。确认规则没有改变后,再重新继续,避免只改最终答案却保留中间错误。
第二轮练习只改一条输入,提前写下你预计哪些后续步骤会变化,再重新演算验证。不要同时更改多个条件,否则很难分清是哪条规则造成差别。若实际游戏还涉及随机结果、其他角色、装备或额外判定,应先把这些条件补入记录,本例不会替它们作假设。
