apple Swift playground 算法之‘向左走,向右走’代码

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

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

教程结束,感谢观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值