触发结构——5.7随机触发(下)
局部变量在随机触发的编写过程中可以提供两个作用。一个是提供一个稳定的输出信号,用来实现多个触发之间的同步延时判定,另一个是用来保存随机结果并在需求时提取。以下是这两个作用的触发示例。
简化的固定平均间隔随机刷兵:
首先我们设置数个单随机延时刷兵触发A、B、C,随机延时分别为A0,B0,C0,然后建立一个初始为0的局部变量x。触发A、B、C的条件均增加一条局部变量x的值为1,结果均增加一条局部变量x的值设为0。接着我们建立一个重复触发X,条件为固定延时X0秒,结果为局部变量x的值设为1。触发A、B、C、X均保持初始允许状态。
触发X可以使局部变量x每隔X0秒被设为1,而触发A、B、C在局部变量x为1后可以刷出一条小队并将局部变量x设为0。也就是说,当A0,B0,C0对X0来说足够小时(均小于三倍X0),平均每X0秒会刷出触发A、B、C的结果中随机某一个小队。如果A0,B0,C0足够小(至少均小于二倍X0),稳定后每X0秒会刷出触发A、B、C的结果中随机某一个小队。而对于触发A、B、C,当局部变量x为0时,随机延时已到的触发会被拦截而不能触发,直到局部变量x为1,此时如果有多个触发的随机延时已到则会从已到的触发中随机选一个,未被选中的则会延续到下次局部变量x为1,以此来实现随机刷触发A、B、C中的三个小队。
这种触发写法使用了数个单随机延时触发来刷兵,并用一个局部变量和一个重复触发控制了刷兵速度。由于一个局部变量能够控制多个小队的随机刷兵以及一次只能刷一个小队,适合应用于较小规模和较长时间的随机刷兵。
固定间隔随机刷兵:
我们需要一组循环触发,和两组实现效果的触发。建立重复触发X、Y来进行循环,建立重复触发A0、B0、C0进行随机,建立重复触发A1、B1、C1对随机结果进行刷兵,并建立局部变量a、b、c,并将初始值均设为0。所有触发均保持禁止状态,使用时由其他触发允许触发X即可。
触发X的条件为固定延时X0秒,结果为禁止触发X,允许触发Y和A0、B0、C0;触发Y的条件为固定延时Y0秒,结果为禁止触发Y,允许触发X和A1、B1、C1。触发A0,B0,C0的条件分别为随机延时a0,b0,c0秒(相对时间长短影响各触发对应小队刷出的概率,一般统一为延时x秒),结果统一为禁止触发A0,B0,C0,以及三个触发分别加一条结果:对应局部变量a/b/c的值设为1。触发A1,B1,C1的条件分别为对应局部变量a/b/c的值为1,结果统一为禁止触发A1,B1,C1,以及三个触发分别加两条结果:对应局部变量a/b/c的值设为0以及用7或80或107号结果刷出进行随机的三个小队。
触发X和Y控制整个随机过程。延时X0秒代表上一轮随机小队刷出后经过多久开始随机过程(由于随机过程不对外部产生影响,X0通常可以为0)。延时Y0秒代表开始随机后经过多久开始判定局部变量并刷随机小队(为了不对随机过程产生影响,Y0通常不小于a0/b0/c0中最大值的1.5倍)。触发A0,B0,C0进行随机过程,当三个触发中有一个的随机延时结束时,将对应触发的局部变量设为1,并禁止三个触发以阻止第二个为1的局部变量的出现和重置触发状态等待下一次随机。触发A1,B1,C1根据局部变量的随机结果立即刷出对应的小队,重置对应的局部变量为0,并且禁止这三个触发自身以等待下一次随机。
这种触发写法较容易理解和编写,结构比较清晰,但是耗费了较多的局部变量和触发数量。另外,这种触发写法能够在完全固定的时间间隔下实现随机的刷兵内容,可以考虑用于大规模成阵型的随机刷兵。

