GameMaker8.0 新手教程 Part 5 -变量与逻辑(下)-

分类栏目:gamemaker教程

804

GameMaker8.0 新手教程 Part 5 -变量与逻辑(下)-

10、for语句

for语句是第三种循环语句。其格式为:

for(语句1;判定条件;语句n)
{
    语句2;
    语句3;
    ...
    语句n-1;
}


for语句和while语句可以完全相互替代,将上述for语句改为while语句,就是:
语句1;

while(判定条件)
{
    语句2;
    语句3;
    ...
    语句n-1;
    语句n;
}


for语句的好处在于可以将用于控制循环的变量的赋值、判定、自增放在一起,便于阅读。
如,上面的例子:

i = 1;
s = 0;
while(i <= 100)
{
    s += i;
    i += 1;
}

show_message(string(s));

将其改为for语句,就是:

s = 0;
for(i = 1;i <= 100;i += 1)
s += i;
show_message(string(s));

使用for语句将用于控制循环的变量i全部放在一起,当循环的内容较多时,便于阅读。
for循环中的变量i也可以被主体所使用。

11、break语句

break语句的作用是终止整个循环。
例如,上述while的例子,你可以改成:

i = 1;
s = 0;
while(true)
{
    s += i;
    i += 1;
    if(i > 100)
        break;
}
show_message(string(s));

效果是一样的。

把for语句改成使用break终止循环,如上述例子可以改成:

s = 0;
for(i = 1;true;i += 1)
{
    s += i;
    if(i > 100)
        break;
}
show_message(string(s));


break一般写在if语句中,否则第一次循环就会执行break中断循环。一个循环中可以写多个break,如:

s = 0;
for(i = 1;;i += 1)
{
    s += i;
    if(i > 100)
        break;
    if(s > 1000)
        break;
}
show_message(string(s));


注意,break语句只中断一层循环。如:

h = 0;
for(i = 1;i <= 100;i += 1)
{
    for(j = 1;j <= 100;j += 1)
    {
        h += i + j;
        if(j > i)
             break;
    }
}

第一次循环时:i = 1,j = 1,h = 0+i+j = 2,
内层for语句继续循环:i = 1,j = 2,h = 2+i+j = 5,
此时j > i,执行break,注意此时程序只会从第二层循环跳到第一层循环,而不是终止整个循环。
跳到第一层循环后,i += 1,故i = 2,仍然满足i <= 100,所以再次进入到第二层循环。

12、continue语句

continue语句的作用是使循环体跳过一次代码执行。
举个例子来理解:

s = 0;
for(i = 1;i <= 100;i += 1)
    s += i;

这是计算1+2+3+...+100的和的代码,如果你要从中去除30,你可以这样写:

s = 0;
for(i = 1;i <= 100;i += 1)
{
    if(i == 30)
        continue;
    s += i;
}

这样当i为30时,执行continue,会跳过本次"s += i",但是并不会终止整个循环,而是i再自增变成31,再进行下一次循环。

注意,由于代码是从上往下执行,所以continue只能跳过位于自己下方的代码。如:

s = 0;
t = 0;
for(i = 1;i <= 100;i += 1)
{
    t += i;
    if(i == 30)
        continue;
    s += i;
}

在这里,continue对"t += 1"无法产生影响,t的最终值是1+2+3+...+100 = 5050,而s的最终值是1+2+3+...+29+31+32+...+100 = 5020。