※☆冰の引言☆※
前文详细叙述了脚本调用在条件中和在效果中的运用,另外对逻辑、比较和算术运算符在XS的使用也做了相应具体的说明,最后从返回值的角度简要谈谈return语句与函数参数之间的联系。本章作为基本语法的收官篇讲的内容不太多,重点就是判断语句与循环语句在XS中如何使用。

※☆本节の紹介☆※


※☆判断语句☆※
判断语句主要有两种结果,一种是 if 结构 另一种是 switch 结构,两者特点各有差异,下面对两者的使用方法和注意事项进行详细说明。
if函数
———— if判断结构 ————
void main()
{
int a = 5;
if (a<1)
{
int b =0;
}
else if (a>2)
{
int b =1;
b++;
}
else
int b =2;
}
## 要点
1. 语法中的“a<1”“a>2”表示判断语句,用于返回 true 或 false(系统返回0/1)
2. 大括号用于标识代码块。如果有N条语句,一定要用大括号括起来。
3. 如果只有一条语句大括号可省略。
4. if{}是必需的, else if{}和 else{}是可选的。
5. 执行顺序: if -> else if -> else
## 示例:
// (1) 如果a与b不等,则将b的值赋值给a。如果a与b相等,则不返回任何结果。
if (a != b)
a = b;
// (2) 如果a大于等于0,则ABS取a。反之(即a小于0),则ABS取-a。
if (a >= 0)
int ABS = a;
else
ABS = a * -1;
// (3) 如果a大于0,则AB取3a。当a小于0,则AB取-2a,当a=0时,不返回任何结果。
if (a > 0)
int AB = 3 * a;
else if(a < 0)
AB = a * -2;
switch函数
———— switch结构 ————
void main() {
int a = 20;
switch(a) {
case 10: {
xsChatData("if(a == 10)");
break;
}
case 20: {
xsChatData("else if(a == 20)");
break;
}
default: {
xsChatData("else");
break;
}
}
}
//输出结果:else if(a == 20)
## 要点
1. switch 循环多用于定点值匹配的 if - else 循环
2. case 后面必须是一个整数 int ,或者是结果为整数的表达式,不能包含任何变量。
3. 每个 case 后跟一个要比较的值和一个冒号。
4. default 非必须,当无 default 时,如果所有 case 都匹配失败,那就什么都不执行。
5. 执行顺序: case 10: -> case 20: -> default:
6. 如果只有一条语句, case 和 default 后面的大括号可省略。
7. 当遇到 break 语句时,switch 终止,程序将跳转到 switch 语句后的下一行。
8. 重点强调!不是每一个 case 都需要包含 break。
如果 case 语句不包含 break ,程序将会依次执行后面的 case ,直到遇到 break 为止。
例如上面的 case 10:匹配成功后会执行 case 20:后面的语句以及 default:后面的语句。
/*
输出结果就会是:
else if(a == 20)
else
*/
//以下为switch-case函数的等效函数
void main() {
int a = 20;
if (a == 10) {
xsChatData("if(a == 10)");
}
else if (a == 20) {
xsChatData("else if(a == 20)");
}
else {
xsChatData("else");
}
}

※☆中断与跳过语句☆※
———— break 中断 & continue 跳过 ————
//循环体中遇到break,将会强制跳出循环体,常用于switch结构
int i = 0;
while( i < 50 )
{
if ( i == 10 )
{
break;
i++;
}
}
## 示例详解:
1. i从0开始,i为0~9时,循环会正常进行
2. i==9时,循环正常进行,i++变为i==10
3. i==10时,满足if条件,于是执行if结构里的break,跳出循环。
4. 11~49 都不会再执行了。
//循环体中遇到continue,将会强制跳过后续指令,直接开始下一循环
string message = "from 0 to 9: ";
for( i = 0; < 10 )
{
if ( i == 5 )
{
message = message + "skip,";
continue;
}
message = message + i + ","; // i==5时,这句会被跳过
}
## 示例详解:
1. i从0开始,i为0~4时,循环会正常进行
2. i==4时,循环正常进行,i递增变为i==5
3. i==5时,满足if条件,于是执行if结构里的continue,
跳过修改message那一句进入下一循环,i递增变为i==6。
4. i为6~9时,循环会正常进行。
5. 整个循环体结束后,message为"from 0 to 9: 0,1,2,3,4,skip,6,7,8,9"

※☆循环语句☆※
while循环
———— while循环结构 ————
while循环用于在某个条件为真时重复一组指令。一旦变为false,循环就会中断,指令不再执行。
void main() {
int a = 0;
int b = 0;
while(b < 6)
{
xsChatData("a = "+a);
a = a + b;
b++;
}
}
/*
输出结果:
a = 1
a = 2
a = 4
a = 7
a = 11
*/
## 循环详解:
b 从 b==0 开始
第一次判定:b==0 小于 6,进入循环。循环末尾b++使得b==1。
第二次判定:b==1 小于 6,继续循环。循环末尾b++使得b==2。
……
第五次判定:b==5 小于 6,继续循环。循环末尾b++使得b==6。
第六次判定:b==6 等于 6,不满足循环条件,跳出循环。执行后面的指令。
总共执行了5次循环体。
//死循环案例 (条件永远满足,无限循环下去)
void main() {
int a = 0;
while(a < 6)
{
xsChatData("a = "+a);
}
}
//a 永远等于0,永远都小于6,无穷执行下去,系统直接宕机
※☆重要提示:
务必避免死循环!(永远无法跳出的循环)
直接后果:会导致游戏或电脑因运行内存耗尽会卡死。(然后电脑就可以报废当铁板烧了)
for循环
———— for循环结构 ————
for循环用于重复一组指令一定次数。
每轮循环结束时变量都会+1或-1,会循环直到不再满足比较条件。
void main() {
for(a = 5; < 10)
{
xsChatData("a = "+a);
}
for(b = 10; > 5)
{
xsChatData("b = "+b);}
}
}
/*
输出结果:
a = 5
a = 6
a = 7
a = 8
a = 9
b = 10
b = 9
b = 8
b = 7
b = 6
*/
## 循环详解:
a 从 a==5 开始
第一次判定:a==5 小于 10,进入循环。循环末尾a递增使得a==6。
第二次判定:a==5 小于 10,继续循环。循环末尾a递增使得a==7。
……
第五次判定:a==9 小于 10,继续循环。循环末尾a递增使得a==10。
第六次判定:a==10 等于 10,不满足循环条件,跳出循环。执行后面的指令。
总共执行了5次循环体。
b 从 b==10 开始
第一次判定:b==10 大于 5,进入循环。循环末尾b递减使得b==9。
第二次判定:b==9 大于 5,继续循环。循环末尾b递减使得b==8。
……
第五次判定:b==6 大于 5,继续循环。循环末尾b递减使得b==5。
第六次判定:b==5 等于 5,不满足循环条件,跳出循环。执行后面的指令。
总共执行了5次循环体。
## for 循环要点:
1. for()里面的变量和值都强制为整数型int。
2. 递增方向 & 循环次数:
上文提及的 a 或 b 为 for 循环的内变量,n 为内变量 [条件值-初始值] 的绝对值
· 如果 符号 为 <, 内变量 将逐次递增+1,最终会循环 n 次。
· 如果 符号 为 <=,内变量 将逐次递增+1,最终会循环 n+1 次。
· 如果 符号 为 >, 内变量 将逐次递减-1,最终会循环 n 次。
· 如果 符号 为 >=,内变量 将逐次递减-1,最终会循环 n+1 次。
3. for循环内变量的值可被调用,但无法进行修改。
4. for 循环默认步长固定是1(即每次+1/-1),无法修改
※☆for循环与while循环的优劣对比:
for 循环不会出现死循环,而且运行性能和速度上要优于 while 循环
while 循环的步长不固定为1,效果可以更加多样化,两者各有千秋,视具体需求进行选择

※☆冰の小结☆※
经过三章的讲述,XS的基本语法已经全部介绍完毕,后面将从具体函数的角度,通过各种实例来带大家更好融会贯通玩转XS。下一篇章将讲述七个纯读取函数和说说独立化那些事儿。
欲知后事如何,请听下回分解


