首先恭喜在座的各位顺利进入学习编程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)两次切换开关并前进一步,因为如果只前进一步会让小人陷入死循环当中。

最后一步就不需要再添加任何代码了,因为已经遇到了开启的开关,所有的开关都已被打开,结束通关。

教程结束,感谢观看。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐