您的位置:首页 > 其它

MC新手入门(三十二)------ 循环控制

2013-05-15 15:31 176 查看
循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构。

1) while 语句;

2) do-while语句;

3) for 语句;

while语句(当条件满足的时候一直做某件事情)

使用场景:在游戏中,我们往往会连续创建某些类似的角色,这时就可以使用while循环来减少创建角色的复杂度。

实例:影分身之术

目标:鼠标点击将要进行分身的角色后,在角色的的正下方等距分出5个一样的影子;



首先我们将目标转换成逻辑描述:

当 影子个数不到5个的时候 一直做如下步骤:

创建影子;

影子个数加1;

直到结束。

直到结束。接着我们开始用MC来实现上述的逻辑:

当对待分身角色(actPlayer)按下鼠标时,做脚本逻辑:

int shadow =0; // 一开始影子个数为0

while( shadow< 5 ) // 当影子个数不到5个的时候

{

CreateActor("animPlayer","actPlayer", "no parent", "no path", actPlayer.x+ (shadow - 2) * 60, actPlayer.y + 60, true); // 在指定的位置创建影子

shadow++; // 创建后影子个数增加1

}

从上面的语句中我们可以总结出,while 语句的一般形式为:

while( 表达式 ) // 表达式为循环条件



语句
// 语句为循环体



while 语句的语义是:计算表达式的值,当值为真(是)时,执行循环体语句。其执行过程用流程图表示:



do-while语句(做……一直到条件不成立的时候)

同样是连续创建某些类似的角色,我们也可以用do-while语句来实现。

首先我们将目标转换成逻辑描述:


创建影子的事情

影子的个数加一

一直到
影子的个数是否小于5 不成立

接着我们开始用MC来实现上述的逻辑:

int shadow=0;//记录影子个数,当shadow=4是,说明影子个数已达到5个

do

{

CreateActor("cha","Actor1", "no parent", "no path", player.x + (shadow- 2) * 60, player.y + 60, true); //在某位置创建一个影子角色

shadow++;//影子个数增加1

}

while( i < 5);判断影子个数是否为小于5,小于5则进行循环

从上面的例子中我们可以知道

do-while语句的一般形式:

do

语句

while(表达式);

它先执行循环中的语句,然后再判断表达式是否为真, 如果为真则继续循环;如果为假, 则终止循环。因此,
do-while循环至少要执行一次循环语句,这是循环与while循环的不同。do-while其执行过程可用下图表示:



for语句

for逻辑描述: 初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。

使用场景:在游戏中,我们往往会查看游戏前几名的得分纪录,这时就可以使用for循环来输出。

实例:得分纪录排行榜

目标:鼠标点击排行榜将会输出前3名的得分纪录。



首先我们将目标转换成逻辑描述:

鼠标点击排行榜时,做下面的事情:

从数组中得分纪录从高到低做排序。

当数组输出个数不到3个的时候 一直做如下步骤:

输出数组;

数组下标加1;

直到结束。

接着我们开始用MC来实现上述的逻辑:

当对击排行榜按下鼠标时,做脚本逻辑:
intscore[10]={260, 560, 590, 120, 150, 160, 180, 250, 560, 900};//得分纪录

int i, j, temp, index;

index = 10; //初始化index

for(i = 0; i <index - 1; i++)//排序

{

for(j = i + 1; j< index; j++)

if(score <score[j])

{

temp = score;

score = score[j];

score[j] = temp;

}

}

for(index = 0; index < 3; index++)//循环输出前3名得分

{

CreateActor("text1","", "", "", -80, -77+40*index, true);//创建角色来显示得分

sprintf(text1.text,"%d",score[index]);//顺序输出数组元素得分

}

从上面的例子中我们可以看出

for语句的表达形式为:
for(表达式1 ;表达式2;表达式3
) 语句 它的执行过程如下:

1)先求解表达式1。

2) 求解表达式2,若其值为真(非 0),则执行for 语句中指定的内嵌语句,然后执行下面第3 )步;若其值为假(0),则结束循环,转到第 5)步。

3)求解表达式3。

4)转回上面第2)步继续执行。

5)循环结束,执行for语句下面的一个语句。

其执行过程可用下图表示:



2012-9-20 10:54:04 上传
下载附件 (12.43
KB)

Demo下载地址:http://www.dongyo.cn/bbs/forum.php?mod=viewthread&tid=2500&extra=page%3D2%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: