首先恭喜在座的各位顺利进入学习编程1的最后一关,我们的努力终将会有回报。
按照前几关的思维惯性,可以先写判断:
如果遇到阻碍时判断……
如果左边有阻碍就右转,反之,如果右边有阻碍就左转。
如果没有遇到阻碍就前进一步。
遇到开启的开关时,结束代码。
完整代码如下:
func zhuanshen() {
if isBlocked {
if isBlockedLeft {
turnRight()
}else{
turnLeft()
}
}else{
moveForward()
}
}
while !isOnOpenSwitch {
zhuanshen()
while isOnGem {
collectGem()
}
while isOnClosedSwitch {
turnLeft()
for i in 1 ... 2 {
toggleSwitch()
moveForward()
}
}
}
第一步,添加自定义转身代码:
func zhuanshen() {
if isBlocked {
if isBlockedLeft {
turnRight()
}else{
turnLeft()
}
}else{
moveForward()
}
}
这一步就是像前面所说的:
如果(if)遇到阻碍(isBlocked)时判断……
如果左边(Left)有阻碍就右转(Right),反之,如果右边有阻碍就左转。
如果没有遇到阻碍就前进一步(moveForward)。
第二步,添加外循环代码:
while !isOnOpenSwitch {
zhuanshen()
}
并添加第一步创建的自定义代码函数,用于执行判断小人需要往哪个方向转身。
第三步,添加两套内循环代码:
while isOnGem {
collectGem()
}
while isOnClosedSwitch {
turnLeft()
for i in 1 ... 2 {
toggleSwitch()
moveForward()
}
}
第一个内循环很好理解,遇到宝石时拾取宝石。
第二个内循环需要*注意,因为外循环会在遇到开启的开关时结束整套代码,会导致在这里开启开关时会意外提早结束代码,俗称bug。
所以需要手动参与,在遇到关闭的宝石时,左转并循环(for)两次切换开关并前进一步,因为如果只前进一步会让小人陷入死循环当中。
最后一步就不需要再添加任何代码了,因为已经遇到了开启的开关,所有的开关都已被打开,结束通关。
教程结束,感谢观看。