循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构。
首先我们将目标转换成逻辑描述: 当 影子个数不到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语句下面的一个语句。 其执行过程可用下图表示:
Demo下载地址:http://www.dongyo.cn/bbs/forum.php?mod=viewthread&tid=2500&extra=page%3D2%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline |