购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.3 关卡案例

4.3.1 初识循环

关卡说明

关卡编号:3-1

关卡难度:*

通关条件:南瓜5个,开关0个。

关卡目标:使用for循环来重复执行代码。

关卡3-1场景图如图4.2所示。

图4.2 关卡3-1场景图

本关卡中需要收集5个南瓜,大家思考一下这些南瓜和传送门的分布有什么特点?

首先,主角每次通过传送门,都会站在旁边一列的起点位置;其次,所有传送门到南瓜的距离相等。这样就可以使用for循环收集所有的南瓜了,需要让循环执行几次呢?这需要大家动动脑筋了。

代码

for (int i = 0; i < 5; i++)

{

move();

move();

take();

move();

}

for循环需要执行5次,每次循环收集一列砖块上的南瓜。

循环的初始化计数器i设置为0,继续循环条件设置为i<5,每次循环i增加1。这样就可以让for循环执行5次,在每次循环中,都使用move()命令前进2格,使用take()命令收集南瓜,再使用move()命令进入传送门。

关卡3-1通关路线图如图4.3所示。

图4.3 关卡3-1通关路线图

4.3.2 循环一周

关卡说明

关卡编号:3-2

关卡难度:*

通关条件:南瓜4个,开关0个。

关卡目标:使用for循环收集四边的南瓜。

关卡3-2场景图如图4.4所示。

图4.4 关卡3-2场景图

本关卡中需要收集4个南瓜,这些南瓜的分布特点是位于正方形四个边上,相对位置也是相同的。主角收集一条边上南瓜的代码,可以在for循环中多次使用。

代码

for(int i = 0; i < 4; i++){

move();

take();

move();

move();

move();

right();

}

根据南瓜的分布位置,主角先移动1格收集南瓜,接下来再向前移动3格,然后右转,主角又站在下一条边的起点上。使用for循环执行上面的代码4次就可以收集到全部的南瓜。关卡3-2通关路线图如图4.5所示。

图4.5 关卡3-2通关路线图

4.3.3 折返开关

关卡说明

关卡编号:3-3

关卡难度:**

通关条件:南瓜0个,开关8个。

关卡目标:使用for循环打开所有开关。

关卡3-3场景图如图4.6所示。

图4.6 关卡3-3场景图

本关卡中共有8个开关,其中4个处于“关闭”状态,4个处于“打开”状态。因此,完成关卡的关键是打开4个“关闭”状态的开关。

“关闭”状态的开关位于正方形四条边的中心上,距离主角的初始位置都有2格。这样的开关分布,可以方便地使用for循环来打开这些“关闭”状态的开关。

代码

for(int i=0; i<4; i++){

move();

move();

toggle();

left();

left();

move();

move();

left();

}

首先打开主角初始位置前面的开关,然后主角回到初始位置,转身朝向下一个开关方向,这样的过程使用for循环重复4次就可以打开所有的开关。关卡3-3通关路线图如图4.7所示。

图4.7 关卡3-3通关路线图

4.3.4 循环传送

关卡说明

关卡编号:3-4

关卡难度:**

通关条件:南瓜0个,开关8个。

关卡目标:识别传送门所产生的重复模式。

关卡3-4场景图如图4.8所示。

本关卡中需要收集5个南瓜,需要大家找到这5个南瓜和传送门的分布规律。

图4.8 关卡3-4场景图

如果找不出规律,可以用笔在主角可能的行进线路上画出移动轨迹,看能不能找出规律。找到这个规律,就可以使用for循环收集所有的南瓜了。

代码

for(int i = 0 ; i < 5; i++){

move();

left();

move();

move();

take();

right();

}

从主角的初始位置出发,先向前移动1格,然后左转移动2格,收集南瓜,然后向右转。这里就完成了第一个南瓜的收集,收集第二个南瓜也是一样的过程。这样就可以使用for循环,让收集第一个南瓜的代码重复运行5次,从而收集关卡中所有的南瓜。关卡3-4通关路线图如图4.9所示。

图4.9 关卡3-4通关路线图

4.3.5 重复模式

关卡说明

关卡编号:3-5

关卡难度:**

通关条件:南瓜0个,开关3个。

关卡目标:将重复模式分解成函数和for循环。

关卡3-5场景图如图4.10所示。

本关卡中需要打开3个开关,这些开关分布在3条支线路径的尽头。在每条支线路径上,主角都要走到开关的位置,打开开关,然后回到支线起点位置。

这个关卡有一定的难度,要完成关卡目标,需要综合运用已经学习过的命令、函数和for循环等知识。

图4.10 关卡3-5场景图

代码

void Move7Step(){

for(int i=0;i<7;i++){

move();

}

}

for(int i = 0; i<3 ; i++) {

move();

move();

right();

Move7Step();

toggle();

left();

left();

Move7Step();

right();

}

完成支线任务的命令集合可以定义成一个函数,然后使用for循环重复调用这个函数。

首先,定义前进7步的函数Move7Step(),用来从支线路径的起点走到开关的位置。

然后,让主角完成一条支线路径的打开开关的过程:向前移动2格,右转,然后使用函数Move7Step()来到开关所在砖块上,打开开关,转身,再调用函数Move7Step()回到分支路线起始位置,向右转。

最后,将“支线代码”放在for循环中,循环次数设定为3,这样就可以打开3个支线路径上的所有开关。

关卡3-5通关路线图如图4.11所示。

图4.11 关卡3-5通关路线图

知识小课堂

在编写代码时,大括号和小括号都是成对出现的,永远不会出现单数的情况。因此,书写代码时一定要检查好大括号和小括号,不能丢失。

4.3.6 多个模式

关卡说明

关卡编号:3-6

关卡难度:***

通关条件:南瓜6个,开关6个。

关卡目标:将多个模式分解成函数和for循环。

关卡3-6场景图如图4.12所示。

图4.12 关卡3-6场景图

本关卡中需打开6个开关和收集6个南瓜,开关和南瓜分布在3列中,并且都是左右对称分布的。

因为每列上南瓜和开关的位置都相同,可以使用for循环重复执行这些命令。为了代码规整易读,可以分别定义收集南瓜的函数和打开开关的函数。

代码

void OpenTwoSwitch(){

move();

toggle();

move();

toggle();

left();

left();

move();

move();

}

void TakeTwoReward(){

move();

take();

move();

take();

left();

left();

move();

move();

}

for (int i = 0 ; i<3; i++){

left();

OpenTwoSwitch();

TakeTwoReward();

right();

move();

}

知识小课堂

Open的中文含义是打开,Two是两个的意思,Switch表示开关,Take表示收集,Reward的本意是“奖励”,这里指代南瓜。

首先定义函数OpenTwoSwitch(),此函数的功能是打开两个开关。主角起始位置距离最近的开关1个砖块,且面向开关方向;函数运行结束后,回到起始位置,背向开关方向。

代码

void OpenTwoSwitch(){

move();

toggle();

move();

toggle();

left();

left();

move();

move();

}

然后定义函数TakeTwoReward(),此函数的功能是收集两个南瓜。主角起始位置距离最近的南瓜1个砖块,且面向南瓜方向;函数运行结束后,回到起始位置,背向南瓜方向。

代码

void TakeTwoReward(){

move();

take();

move();

take();

left();

left();

move();

move();

}

有了函数OpenTwoSwitch()和函数TakeTwoReward(),下面使用for循环收集南瓜和打开开关,因为有3条支线路径,循环的次数设定为3。

代码

for (int i = 0 ; i<3; i++){

left();

OpenTwoSwitch();

TakeTwoReward();

right();

move();

}

关卡3-6通关路线图如图4.13所示。

图4.13 关卡3-6通关路线图

4.3.7 十字分布

关卡说明

关卡编号:3-7

关卡难度:***

通关条件:南瓜16个,开关0个。

关卡目标:组合所学技能,使用循环、函数分解问题。

关卡3-7场景图如图4.14所示。

图4.14 关卡3-7场景图

本关卡中需收集4组共计16个南瓜。4组南瓜在场景的4个角落,每组有4个南瓜,呈现“山”字形。虽然每组南瓜的方向不太一致,但排布方式是一样的。

每组南瓜旁边都有1个传送门,位于“山”字底部中间。

通过分析场景中南瓜的部分特点,大家应该可以找到收集这些南瓜的方法。

代码

void TurnBack(){

left();

left();

}

void TakeGroup(){

move();

take();

left();

move();

take();

TurnBack();

move();

left();

move();

take();

TurnBack();

move();

left();

move();

take();

move();

}

for( int i = 0; i< 4; i++ ){

TakeGroup();

}

根据南瓜分布的规律,定义函数TakeGroup()来收集1组南瓜,然后用for循环重复4次执行函数TakeGroup()来收集所有南瓜。

为了使用方便,先定义让主角转身的函数TurnBack()。

代码

void TurnBack(){

left();

left();

}

函数TakeGroup()收集1组南瓜。收集每组南瓜的顺序相同,都是先收集中心位置南瓜,然后顺时针收集其他3个南瓜。

代码

void TakeGroup(){

move();

take();

left();

move();

take();

TurnBack();

move();

left();

move();

take();

TurnBack();

move();

left();

move();

take();

move();

}

使用for循环执行4次TakeGroup(),就可以收集4组南瓜。在每组南瓜收集完毕后,主角会通过传送门到达另一组南瓜旁边。

代码

for( int i = 0; i< 4; i++ ){

TakeGroup();

}

关卡3-7通关路线图如图4.15所示。

图4.15 关卡3-7通关路线图 PmVBF+iuQT85blWEhJs0G4eMbX/4JNPNRrXaGgM85MetWtI5tHMglOqQ6MLq8tgl

点击中间区域
呼出菜单
上一章
目录
下一章
×