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

来源:互联网 发布:在淘宝上开店要钱吗 编辑:程序博客网 时间:2024/05/21 03:24

循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构。
   1)  while 语句;
   2)  do-while语句;
   3)  for 语句;

    while语句(当条件满足的时候一直做某件事情)
使用场景:在游戏中,我们往往会连续创建某些类似的角色,这时就可以使用while循环来减少创建角色的复杂度。
      实例:影分身之术
      目标:鼠标点击将要进行分身的角色后,在角色的的正下方等距分出5个一样的影子;

5-4-1-1.png



首先我们将目标转换成逻辑描述:
       影子个数不到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 语句的语义是:计算表达式的值,当值为真()时,执行循环体语句。其执行过程用流程图表示:

5-4-1-2.png


      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其执行过程可用下图表示:

5-4-2-1.png


    for语句
   for逻辑描述: 初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。 
使用场景:在游戏中,我们往往会查看游戏前几名的得分纪录,这时就可以使用for循环来输出。
实例:得分纪录排行榜
目标:鼠标点击排行榜将会输出前3名的得分纪录。

5-4-3-1.png


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

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

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

                当数组输出个数不到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(表达式;表达式2;表达式3 ) 语句 它的执行过程如下:
                                                        1)先求解表达式1
                                                        2) 求解表达式2,若其值为真(非 0),则执行for 语句中指定的内嵌语句,然后执行下面第)步;若其值为假(0),则结束循环,转到第 5)步。
                                                        3)求解表达式3
                                                        4)转回上面第2)步继续执行。
                                                        5)循环结束,执行for语句下面的一个语句。
其执行过程可用下图表示:




5-4-3-2.png

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


原创粉丝点击