脚本基础

循环与分支

说明 Blue 引擎脚本中常见的循环与分支控制写法,包括

说明

循环与分支用于控制一段逻辑要执行几次,以及在不同结果下进入哪一条分支。

需要批量处理、重复执行、按编号分支、按结果切换处理逻辑时,可先看这一页。

#FOR 循环

#FOR 用于重复执行一段脚本。

常见写法如下:

#FOR (D0 = 0, D0 < 10, D0 + 1)
#IF
TRUE
#ACT
SENDMSG 5 测试消息
#~FOR

这类结构通常包含三部分:

  1. 初始值
  2. 循环条件
  3. 每轮执行后的变化

FOR 下标

循环过程中,可通过 <$LoopCursor> 获取当前循环下标。

#SAY
当前循环下标:<$LoopCursor>

需要在循环里按序号处理内容、输出编号或拼接结果时,可直接使用这个值。

BREAKLOOP 跳出当前 FOR

BREAKLOOP 用于提前结束当前 #FOR 循环。

#FOR (D0 = 0, D0 < 10, D0 + 1)
#IF
SMALL M次数 1
#ACT
BREAKLOOP
#~FOR

需要在某个条件成立后停止当前循环时,应使用 BREAKLOOP。

这类写法表示“当前次数已经不足,应直接跳出循环”。

BREAK 中止当前流程

BREAK 用于中止当前流程。

这一类写法常见于:

  • 前置条件不满足时直接结束
  • 命中某个分支后不再继续往下执行
  • 防止后面的脚本被继续触发

BREAK 和 BREAKLOOP 不同:

  • BREAKLOOP 只结束当前循环
  • BREAK 会直接中止当前流程

#CASE 分支

#CASE 适合根据整数结果进入不同分支。

常见写法如下:

#CASE(M结果)
#1:
#ACT
GOTO @Result1

#2:
#ACT
GOTO @Result2
#~CASE

这类写法适合处理:

  • 不同编号进入不同标签
  • 不同结果执行不同逻辑
  • 多个固定值对应不同处理方式

#IF 和 #CASE 的区别

两者都可以做分支,但适用场景不同:

写法适用场景
#IF条件判断、范围判断、真假判断
#CASE固定编号分支、固定结果分支

需要判断“大于、小于、等于、是否满足条件”时,优先使用 #IF。

需要根据 1、2、3 这类固定结果跳不同分支时,优先使用 #CASE。

在 #IF 里,循环页沿用条件判断页里的关键字比较写法:

  • SMALL M剩余次数 1

需要范围判断时,继续用 #IF;需要按固定结果拆分多个出口时,再切到 #CASE。

常见场景

批量执行固定次数

#FOR (D0 = 0, D0 < 3, D0 + 1)
#ACT
SENDMSG 5 第 <$LoopCursor> 次执行
#~FOR

这类写法用于固定执行多次相同逻辑。

条件满足后停止循环

#FOR (D0 = 0, D0 < 10, D0 + 1)
#IF
SMALL M剩余次数 1
#ACT
BREAKLOOP
#ELSEACT
DEC M剩余次数
#~FOR

这类写法用于循环执行到某个条件成立后停止。

根据结果跳不同标签

#CASE(M结果)
#1:
#ACT
GOTO @战士奖励

#2:
#ACT
GOTO @法师奖励

#3:
#ACT
GOTO @道士奖励
#~CASE

这类写法适合把多个固定分支拆开处理。

使用建议

  • 重复逻辑达到 3 次以上时,可优先考虑是否应改成 #FOR。
  • 循环体里要写退出条件,避免把无效逻辑重复执行过多次。
  • 只结束当前循环时使用 BREAKLOOP,直接结束当前流程时使用 BREAK。
  • 分支结果是固定编号时,优先考虑 #CASE;仍然需要范围判断时,继续使用 #IF。
  • 循环和分支嵌套开始变多时,应及时拆标签,避免单段脚本过长。

相关阅读