
第四关 尽收囊中
▲任务描述
本关卡中有9枚宝石需要收集,并且9枚宝石排列在3×3的矩阵中,Byte需要识别出重复的模式来获取这9枚宝石。第四关界面如图3.23所示。

图3.23 第四关界面
本关卡中可用的相关命令如图3.24所示。

图3.24 浮现命令栏
小贴士
本关卡是挑战关卡。挑战关卡与目标关卡的不同之处在于,挑战关卡中存在多种方式来通关。本关卡主要是在上一关卡的基础上继续巩固大家识别重复模式的能力,同时能够创建新函数来完成任务!
▲任务分析
挑战关卡的解决方式不唯一,如何找到最优解呢?首先我们需要对场景地图进行详细的分析,其次从中找出合适的重复模式,最后进行组合与调用来完成任务。现将三维地图转变为二维平面地图,便于分析归纳重复模式,如图3.25所示。

图3.25 三维地图与二维地图对比
通过对二维平面地图的观察,找到一种可参考的重复模式如下:

将此重复模式运用到任务中,可得到图3.26所示的路线规划。经过4次重复模式的运行,Byte又回到起点,此时只剩下中间一枚红宝石未获取,那么只需要向前1步,然后右转,再前进1步,获取红宝石即可完成此关任务。

图3.26 重复模式运行4次的效果图

简单模式的确定
编程思维
如何理解最优解呢?在Swift Playgrounds中,我们可以理解为在满足目标条件的前提下,Byte行走的步数最少,路线规划最合理。相同步数下,产生的代码量可能是不同的,因为所采取的策略不同。每个人都拥有自己所偏好的编程习惯,你写的代码逻辑清晰,在逻辑正确的情况下减少多余代码,并且提高可读性,那就是属于你自己的最优解!
识别重复模式是为了让程序简洁、美观、易懂,所以我们识别最佳重复模式。
▲解决方案
根据前面任务分析所得到的重复模式,将重复模式的命令写入一个自定义函数中,为这个函数取名为“collectTwoGems”,函数定义如下:

定义函数后,在命令栏中即可找到新定义的函数名,就像调用其他我们已经用过的函数一样,如图3.27所示。

图3.27 命令栏
本关卡的解决方案如下:

关键步骤的运行效果如图3.28所示。

图3.28 关键步骤的运行效果

运行微视频
小贴士
重复的模式有很多,如以获取3枚红宝石为一组重复模式等,我们只是提供一个参考。你可以发散自己的思维,想想其他重复模式,并完成自己定义的函数。
▲任务小结
①巩固定义一个函数,并给函数命名,用于重复的模式。
②巩固识别地图里面重复的模式。
▲任务拓展
1.在App中完成此关卡的任务
2.习题练习
(1)如果解决方案是这样的,能完成任务吗?如果不能,该如何修改?

(2)如果解决方案是这样的,能完成任务吗?如果不能,该如何修改?

(3)如果重复模式如图3.29所示,该怎么实现函数呢?整体解决方案是怎样的?

图3.29 一种新的重复模式图

图3.30 拓展任务场景
(4)如果任务拓展场景如图3.30所示,解决方案应该是怎样的?
你的思路: