跳轉到

世界的角落

挑戰:修改兩個傳送門的狀態來通過關卡。

簡介

在這項挑戰中,關卡世界裡有很多寶石和開關,還有好幾個傳送門可以通過。這表示通關的方式有很多種。

在編寫程式碼時,請試著在腦海中思考不同的解決方法並找出最有效率的一種。編寫有效率的程式碼可讓程式更快速執行,進而讓使用者得到愉快的體驗並增進電池的續航力。

請使用 greenPortalorangePortal 來存取傳送門。

img

講解

花一分鐘來檢視關卡,看看你目前學習的哪些技巧對通過關卡最有用處。解決方法有很多種,試試看你想到的其中一種方法吧!

解答

請務必嘗試解題

請同學務必嘗試自己解題,不要直接看答案。學習程式時最好的學習方法是自己嘗試解題,程式設計不會只有一種寫法,請通過不斷的嘗試和優化來找到屬於自己最好的解答。

func turnAround() {
    turnLeft()
    turnLeft()
}
func checkSquare() {
    if isOnGem {
        collectGem()
    } else if isOnClosedSwitch {
        toggleSwitch()
    }
}
func collectOrToggle() {
    moveForward()
    checkSquare()
    turnAround()
}
func collectOrToggleThenTurnRight() {
    collectOrToggle()
    moveForward()
    turnRight()
}
func collectOrToggleThenTurnLeft() {
    collectOrToggle()
    moveForward()
    turnLeft()
}
turnLeft()
moveForward()
moveForward()
greenPortal.isActive = false
for i in 1...3 {
    collectOrToggleThenTurnRight()
}
collectOrToggle()
greenPortal.isActive = true
moveForward()
greenPortal.isActive = false
collectOrToggleThenTurnLeft()
collectOrToggleThenTurnLeft()
moveForward()
moveForward()
orangePortal.isActive = false
moveForward()
for i in 1...3 {
    collectOrToggleThenTurnRight()
}
collectOrToggle()
orangePortal.isActive = true
moveForward()
orangePortal.isActive = false
turnLeft()
collectOrToggleThenTurnRight()
collectOrToggle()

後記

你剛剛通過了一個困難的挑戰!透過檢驗問題和選擇要使用的技巧,你持續地訓練大腦分辦如何解決一系列的問題。隨著經驗的累積,你就可以更快速且有效率地解決新問題了。