
第二关 创建新函数
▲任务描述
定义并使用你自己的函数来实现右转,同时使用Swift命令,让Byte行动起来,去收集宝石和打开开关,游戏第二关界面如图3.7所示。

图3.7 游戏第二关界面
本关卡中可用的相关命令如图3.8所示。

图3.8 浮现命令栏
▲任务分析
通过观察地图,本关卡需要打开3个开关,其中2个已经打开,所以只需将最后一个开关打开即可。从起点出发后,有左、右两条路可以到达最后一个开关,如图3.9所示。路线a需要走9步,其中进行4次右转;路线b需要走6步,其中进行3次右转和2次左转。以选择最短路径的原则来确定线路。3次右转需要用到9次turnLeft(),你是否感觉到了烦琐与冗长?
在上一关卡中只右转了一次,所以使用3次左转还是可以接受的。但是如果使用右转,是多少次呢?该如何节省代码量并提高代码可读性呢?没错,我们可以将3次turnLeft()进行捆绑组合,给这个组合取个名字,要用到时“喊”名字即可,这就是使用编程中的函数。

图3.9 路线图
通过前面的分析,我们决定使用函数来封装turnRight()这个右转的命令。如何使用函数呢?
第一步:定义函数。函数定义的结构及注释如图3.10所示。

图3.10 函数定义的结构及注释

函数介绍
第二步:调用函数。调用函数很简单,只需要给出函数名再加上()即可。以turnRight()为例,函数定义如下:

turnRight()函数的添加及运行效果如图3.11所示。

图3.11 turnRight()函数的添加及运行效果
编程思维
函数是为了实现一个特定的功能,然后把实现这个功能的所有执行语句做一个封装。每次用到这个功能,你只要调用这个函数就可以了。这样能够提高效率,增加代码的可读性。
▲解决方案
本关卡给出了4个常用命令:moveForward(),collectGem(),turnLeft(),toggleSwitch()。同时可以使用封装的turnRight()命令。
根据前面的任务分析,一个供参考的Byte行进路线如图3.9所示,命令组合解决方案如下:

编程思维
像turnRight()这样的命令实际上是执行多个任务的函数,前面也一直在使用函数,到目前为止,我们所使用过的每个命令实际都是软件提供的函数。
关键步骤的运行效果如图3.12所示。

图3.12 关键步骤的运行效果
▲任务小结
学会定义并调用函数。
▲任务拓展
1.在App中完成此关卡的任务
2.习题练习
(1)如果解决方案是这样的,能完成任务吗?如果不能,该如何修改?

运行微视频

(2)如果任务拓展场景如图3.13所示,解决方案应该是怎样的?

图3.13 任务拓展场景
你的思路: