一个道具被多次触发提示,并不代表收集到了多个不同道具。对要求不同收集物的任务,保存已经领取的唯一标识比只累计触发次数更可靠,也方便处理重复接触和读档后的回调。
下面使用一组独立练习数据,说明输入、规则、处理顺序和输出之间的关系。建议先遮住结果自己推演,再逐步对照;如果出现差异,应先定位第一处不同,并检查边界条件,不要只把最后的答案改成一样。
规则和数据
本例A至J代表十个不同收集物,开始时已经拥有其中两个。每次触发一个标识,只有此前没有拥有的才增加进度。达到目标数量后仍保留完整集合,不消费收集物,也不会重复发放任何奖励。
起始收集物['A', 'G'],要求6种 触发次序['J', 'H', 'D', 'F', 'J', 'F', 'F', 'A', 'I', 'J', 'B', 'E', 'H', 'C', 'B', 'G', 'J']
逐步推演
第1次触发J:首次拥有,进度增加;现在3/6,目标尚未满足。
第2次触发H:首次拥有,进度增加;现在4/6,目标尚未满足。
第3次触发D:首次拥有,进度增加;现在5/6,目标尚未满足。
第4次触发F:首次拥有,进度增加;现在6/6,目标已满足。
第5次触发J:已拥有,忽略重复;现在6/6,目标已满足。
第6次触发F:已拥有,忽略重复;现在6/6,目标已满足。
第7次触发F:已拥有,忽略重复;现在6/6,目标已满足。
第8次触发A:已拥有,忽略重复;现在6/6,目标已满足。
第9次触发I:首次拥有,进度增加;现在7/6,目标已满足。
第10次触发J:已拥有,忽略重复;现在7/6,目标已满足。
第11次触发B:首次拥有,进度增加;现在8/6,目标已满足。
第12次触发E:首次拥有,进度增加;现在9/6,目标已满足。
第13次触发H:已拥有,忽略重复;现在9/6,目标已满足。
第14次触发C:首次拥有,进度增加;现在10/6,目标已满足。
第15次触发B:已拥有,忽略重复;现在10/6,目标已满足。
第16次触发G:已拥有,忽略重复;现在10/6,目标已满足。
第17次触发J:已拥有,忽略重复;现在10/6,目标已满足。
最终拥有['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],新增8种,重复触发9次。
如何复核与应用
对操作记录的每个前缀求不同标识的集合,再与起始集合合并。集合大小应等于当时进度;调换重复触发的先后不应改变最后结果,但首次达到目标的时刻可能不同。
唯一标识需要在重复接触时保持稳定,若每次接触都临时生成新标识,集合也无法识别重复。本例特意把物体身份与触发次数分开,让任务进度的含义保持一致。
这是一套明确限定的教学模型,实际作品可能采用其他约定。记录实验时,保留原始输入、每步状态以及规则版本;调整一个条件后重新演算,并检查起点、终点、重复输入和刚好位于边界的情况,才能知道差异来自设计还是计算。
