欢迎光临散文网 会员登陆 & 注册

触发结构——5.4应用:在任务里写一个计数器

2022-02-28 20:29 作者:叶墨冷泉  | 我要投稿

由于局部变量只有0和1两个取值,所以计数器只能够用二进制来表示,即N个局部变量能够表示的数的范围为0~(2^N)-1。为了举例,我们使用A、B、C、D、E五个局部变量来表示这个数ABCDE,其中A为最低位,E为最高位,计数范围是0~31。

 

作为一个计数器,我们需要能对其进行+1操作,这需要一系列的触发来实现。我们需要如下几个触发:

判断某一个局部变量状态的触发,首先是A,触发A0:条件为任何条件,结果为允许触发A1和A2,并禁止自身。触发A1:条件为A为0,结果为A为1,并禁止触发A1和A2。触发A2:条件为A为1,结果为A为0,且允许触发B0,并禁止触发A1和A2。

然后是B,触发B0:条件为任何条件,结果为允许触发B1和B2,并禁止自身。触发B1:条件为B为0,结果为B为1,并禁止触发B1和B2。触发B2:条件为B为1,结果为B为0,且允许触发C0,并禁止触发B1和B2。

让我们来看一下这些触发的意义。触发A0和B0为局部变量A和B进行+1操作的启动触发,允许触发A0或者B0即代表对A或B进行+1操作。触发A1、A2通过触发A0启动,它们具体判断局部变量A当前的取值,并执行+1(A1)或进位(A2)的操作。触发B1、B2与A1、A2的作用相似,这里不再赘述。

这样,每个局部变量对应0,1,2三个触发,将每个局部变量的触发以相似的结构链接起来之后,就能实现从A到E的每一位的进位判断。这里需要注意,当A到E的值均为1时,再次允许触发A0,会顺次执行触发A2,B2…直到E2。这种情况相当于对二进制数11111进行+1操作,结果为32(100000),已经超出计数器能够记录的最大值。作者在考虑这种情况时,应该增加局部变量的个数,或在触发E2中允许实现计数器溢出对应效果的触发。

最后是判断计数器需要进行+1的条件。当计数器需要+1时,这种情况下对应的触发只需要直接允许触发A0即可。在不考虑触发执行时间的情况下,应该可以认为计数器+1是瞬间完成的。另外说明一下,计数器相关的触发均需要设置重复触发,重复触发和上述触发中所有禁止触发的结果的目的均为使计数器的触发能够反复执行,而不是仅执行一次。

 

计数器的触发在写出来之后自动处于启动状态。如果需要永远禁止计数器,可以使用12号结果,选择触发A0,这会使所有通过允许A0使计数器+1的触发结果无效化,A0在此之后将永远不会执行,同时可以保留当前所有局部变量的值。由于允许A0的触发可能是难以判断启动时间的,而计数器+1可视为瞬间完成,所以仅仅禁止触发A0不能够实现禁止计数器的效果。如果需要重新启动计数器,可以事先将触发A0复制数份,在摧毁触发A0后使用其余复制触发使计数器继续+1。

 

在计数器运行一段时间后,计数器应该执行了+1操作数次,这时,作者应该需要输出这个计数器的结果,按照结果进行其它的触发操作。计数器记录的数值是这样的:当这些局部变量为1时,最低位(A)代表1,第二位(B)代表2…第五位(E)代表16,依此类推,直到最后一位,为0的局部变量不计数。作者可以按自己的想法自由使用这些数值,这里仅举数例。

延长全局任务计时器:需要一个启动触发,和与局部变量数量相等的实现效果的触发。启动触发允许所有实现效果的触发,每个实现效果的触发判断一个局部变量是否为1,并按照局部变量代表的值增加全局任务计时器的值。

为玩家增加额外增援:需要的触发同上,将增加全局任务计时器改为派遣对应局部变量代表的值的援军。

触发特殊事件:在战役中可以设置数个事件,当玩家每完成一个后允许触发A0使计数器+1,当计数器超过某个值后触发另外一个事件,例如任务进入下一阶段或直接胜利。这可以用于在多个不同目标中让玩家任选数个目标完成。


触发结构——5.4应用:在任务里写一个计数器的评论 (共 条)

分享到微博请遵守国家法律