复合语句
前言与确认
SIF 只能管一行,实在不够用。现实里的游戏充满“如果……就……”“重复 N 次”“一直做直到……”这样的逻辑,这就需要复合语句——能一次控制很多行的语句。
先确认一下我们现有的工程文件夹结构:
root/
├─ emuera.config
├─ Emuera1824.exe
├─ CSV/
└─ ERB/
└─ System.erb其中,System.erb的代码为:
erb
@EventFirst
Print Hello World!
QuitIF:根据条件选择分支
IF 会从多个分支里挑一个执行:
erb
@EventFirst
#Dim Age = 18
IF Age < 6
PrintL 你是小朋友
ELSEIF Age < 18
PrintL 你是少年
ELSE
PrintL 你是大人
ENDIF
QuitIF 条件:条件成立时,执行到下一个ELSEIF/ELSE/ENDIF为止;ELSEIF 条件:前面的条件都不成立时,再判断这个;ELSE:前面都不成立时执行;ENDIF:整个分支结束。
每一个 IF 都必须有对应的 ENDIF,否则会报错:
REPEAT:简单的重复
REPEAT 到 REND 之间的内容会重复执行若干次。次数写在 REPEAT 后面:
erb
@EventFirst
REPEAT 3
Print 第
PrintV COUNT
PrintL 次循环
REND
Quit输出:
第0次循环
第1次循环
第2次循环注意计数的内置变量叫 COUNT,它是从 0 开始的。
FOR:更灵活的循环
FOR 也能循环,但可以自定义计数的变量、起点和终点:
erb
@EventFirst
FOR I, 1, 4
PrintV I
PrintL
NEXT
Quit输出:
1
2
3FOR I, 1, 4 的意思是:让 I 从 1 开始,每轮加 1,直到 I 达到 4 之前停下来(所以不包含 4)。
WHILE:条件成立就一直做
WHILE 会在条件成立时不断重复,直到条件不再成立:
erb
@EventFirst
#Dim I = 0
WHILE I < 3
PrintV I
PrintL
I += 1
WEND
Quit输出:
0
1
2如果循环里忘了让
I变大,条件就永远成立,程序会陷入死循环。写到WHILE时,记得检查“这个条件最终会变假吗”。
BREAK 与 CONTINUE
在循环里,我们还能用两个小开关:
BREAK:立刻跳出整个循环;CONTINUE:跳过本轮剩下的内容,直接进入下一轮。
erb
@EventFirst
FOR I, 1, 10
SIF I == 3
CONTINUE ; 3 不打印,直接下一轮
SIF I == 6
BREAK ; 到 6 就整个结束
PrintV I
PrintL
NEXT
Quit输出:
1
2
4
5SELECTCASE:多路分支
当一个值有很多种可能时,IF 会写得很啰嗦,这时用 SELECTCASE 更清爽:
erb
@EventFirst
#Dim Command = 2
SELECTCASE Command
CASE 1
PrintL 执行第一项
CASE 2, 3
PrintL 执行第二或第三项
CASE 10 TO 20
PrintL 执行第 10 到 20 项
CASEELSE
PrintL 其他情况
ENDSELECT
QuitCASE 支持多种写法:单个值(CASE 1)、多个值(CASE 2, 3)、范围(CASE 10 TO 20)。都不匹配时执行 CASEELSE。
嵌套
复合语句可以互相嵌套,比如在循环里写判断:
erb
@EventFirst
FOR I, 1, 6
IF I % 2 == 0
PrintL 偶数
ELSE
PrintL 奇数
ENDIF
NEXT
Quit只要记住每一层都要完整地闭合(IF…ENDIF、REPEAT…REND),缩进对齐,就不容易出错。
小结
IF/ELSEIF/ELSE/ENDIF做条件分支;REPEAT/REND、FOR/NEXT、WHILE/WEND做循环;BREAK跳出循环,CONTINUE进入下一轮;SELECTCASE/CASE/CASEELSE/ENDSELECT做多路分支;- 复合语句可以嵌套,但每层都要闭合。
下一步,我们学习如何把一段逻辑打包成可以重复使用的函数:函数的定义与用法。