游戏记录复盘·按键按下与抬起:练习14
这份独立练习关注按键按下与抬起。它提供明确的虚构规则和一段完整记录,适合先自己判断、再核对每一步。所有数据只用于学习机制,不代表任何具体产品的实现;实际规则有变化时,需要重新建立记录。
本例规则与输入
开始时A、B都未按住。未按住的键收到按下消息,记一次操作并进入按住状态;重复按下不计数。抬起将该键恢复为未按住,无论此前状态如何,都不产生操作。
输入日志:B抬起;B按下;A按下;A按下;A抬起;B抬起;A按下;B按下;A抬起;B按下;A按下;A抬起;A按下
记录方法
输入日志里的“按下”与真正开始的一次操作并不相等。长按产生的重复消息,需要与一次完整的按下、抬起周期区别开。
维护每个键当前是否处于按住状态,只有从未按住变为按住时才增加一次。不要用收到消息的总条数估计玩家操作次数。
逐条核对
第1条,B抬起:不产生新操作;累计A为0次、B为0次。
第2条,B按下:产生一次新操作;累计A为0次、B为1次。
第3条,A按下:产生一次新操作;累计A为1次、B为1次。
第4条,A按下:不产生新操作;累计A为1次、B为1次。
第5条,A抬起:不产生新操作;累计A为1次、B为1次。
第6条,B抬起:不产生新操作;累计A为1次、B为1次。
第7条,A按下:产生一次新操作;累计A为2次、B为1次。
第8条,B按下:产生一次新操作;累计A为2次、B为2次。
第9条,A抬起:不产生新操作;累计A为2次、B为2次。
第10条,B按下:不产生新操作;累计A为2次、B为2次。
第11条,A按下:产生一次新操作;累计A为3次、B为2次。
第12条,A抬起:不产生新操作;累计A为3次、B为2次。
第13条,A按下:产生一次新操作;累计A为4次、B为2次。
结果及另一种检查
最终A产生4次、B产生2次操作;仍按住的键为A、B。
复核时可以分别摘出A与B的子日志,再标记每段连续按下消息的第一条。另一把键的消息不会改变本键状态,因此分开统计后相加应与合并日志一致。
练习建议
动手时,把纸分成输入、操作前状态、操作后状态三列,先不要看最后答案。出现差异后从第一条不同的记录开始检查,而不是只改末尾数字。若第一处分歧还没解释清楚,继续算往往只会把同一个错误传到后面。记录单位、正负方向和是否包含边界,也能让别人复核你的过程。
复习时只改一个条件,例如改一条事件、一个初始值或一次记录,先预测哪些后续行会受影响,再重新计算。把保持不变的部分也写下来,才能区分真正的机制变化与偶然的数字变化。练习完成后,可尝试用另一种办法核对总量、边界或最终状态;两种方法一致,比只重复原来的运算更有帮助。