青少年编程Playgrounds之十一–条件代码
第六关 微困其中
首先无脑完成开关或宝石搜集函数
func collectOrToggle(){
if isOnGem{
collectGem()
}else if isOnClosedSwitch {
toggleSwitch()
}
}
然后,当我们点击编程区域时,仔细看下方提供的函数时,会发现,它悄悄提供了一个函数,即isBlock
有了这个函数,编程就会方便很多。
那么分析Byte同学的逻辑线路
总共需要完成8个开关或者宝石的操作,那么需要前进8次,同时每次前进完成需要完成搜集或打开开关动作,然后根据情况选择是直接前进还是转向。
那么,再定义一个转向或者前进的函数
//如果前路不通,左转,再前进
func moveAndTurn(){
if isBlocked{
turnLeft()
}
moveForward()
}
然后在主程序中调用8次上面两个函数即可
for i in 0..<8{
moveAndTurn()
collectOrToggle()
}
第七关 决策树
Byte再一次站在了起点,这是他本章冒险的最后一关,但不是冒险的全部。虽然每次过关等待它的只不过是新的挑战,但它并不退却,因为这是它生命的意义。
每次遇到钻石右转,遇到未打开的开关左转。那么首先完成,左右两个方向的任务。
func solveRightSide(){
collectGem()
turnRight()
for i in 0..<4{
if isBlocked{
turnLeft()
}
moveForward()
}
collectGem()
turnLeft()
turnLeft()
for i in 0..<4{
if isBlocked{
turnRight()
}
moveForward()
}
turnRight()
}
分成来去两个方式来解决右路的问题,并回到原点。
左边宝石获取并回到原点
func solveLeftSide(){
toggleSwitch()
turnLeft()
moveForward()
collectGem()
turnLeft()
turnLeft()
moveForward()
turnLeft()
}
主程序
for i in 0..<5{
moveForward()
if isOnGem{
solveRightSide()
}else if isOnClosedSwitch{
solveLeftSide()
}
}
运行代码
虽然完成了任务,但是这个方法只是针对该地图宝石,开关位置固定的情况而言,可以通过修改程序,实现宝石开关不固定的情况来完成任务,这个也不是很麻烦,就不赘述了。
好了,条件代码章节完成。