通过观察和反复测试可以发现终点并非是最后两块悬崖处而是红色宝石,否则会陷入无限死循环。

我的思路是:没有遇到阻碍和没有红宝石时前进,并在遇到‘关闭的开关’时打开开关,遇到阻碍时右转,遇到宝石是停止循环后拾取宝石。

完整代码如下:

while !isBlocked && !isOnGem{
    moveForward()
    while isOnClosedSwitch {
        toggleSwitch()
    }
    while isBlocked {
        turnRight()
    }
}

collectGem()

第一步添加外循环代码:

while !isBlocked && !isOnGem{
    moveForward()
}

请注意第一步如果没有在while循环条件处添加【没有遇到宝石】的逻辑运算符,会导致遇到红宝石时直接忽略并在最后两块悬崖处来回反复循环,使循环代码无法彻底结束。

第二步添加两个内循环代码:

while isOnClosedSwitch {
    toggleSwitch()
}
while isBlocked {
    turnRight()
}

这一步很好理解,遇到关闭的开关时打开开关,遇到阻碍时右转。

请注意两个内循环都在一个外循环的平级里而并非是内循环里又嵌套一个内循环

最后在第一步外循环遇到红宝石时停止循环并执行下一行代码拾取宝石:

collectGem()

教程结束,感谢观看。

更多推荐