「無箭狼」這是一個非常簡單的關卡,但不少同學在闖關的時候容易誤解關卡意思,導致卡關。本關的通關目標是收集15個蘑菇。
而進入游戲時的目標頁告訴我們,這片森林里存在著危險的食人魔獵手,所以我們必須要喚醒我們的寵物狼來幫助我們抵御箭矢。根據注釋,我們首先需要喚醒寵物狼,只需要走到寵物狼的身邊說點什么即可。隨后小狼就醒來了,而第二行注釋則要求開始收集蘑菇。
可能是受第一行注釋的誤導,不少同學覺得,喚醒寵物狼以后不用讓寵物狼做點什么嗎?于是潛意識認為,下一行代碼是讓寵物狼幫忙去收集蘑菇。然后就使用pet.fetch()語句來讓寵物狼收集蘑菇。那么此時便會發生問題:如果寵物狼去收集蘑菇了,那么誰來保護英雄抵御箭矢呢?
所以此時要求的,其實是讓英雄自己去收集,而根據提示,我們能夠知道,只需要讓寵物狼跟在我們身邊,就能自動幫助我們抵御箭矢。因此,正確的過關思路應該是:英雄喚醒寵物狼——英雄收集蘑菇。根據通關思路,完成代碼。
此時大家的代碼可能是這樣寫的,而這樣寫也確實能夠直接過關,但是這樣并不是一個真正正確的過關代碼。像這個錯誤,大家或許在前面的關卡偶爾會見到過。報錯的內容是:attack的參數接收到了null。
可能每個字大家都認識,但是串起來以后就不太明白具體的意思了,null這個單詞的意思是「空」、「不存在的」,那么我們看看此處attack的參數是什么?
是我們傳入的enemy變量,是搜索敵人后得到的變量,此處的報錯正是說明我們向attack函數內傳入的enemy變量,不存在。這也就是說明,此時我們并沒有在周圍發現敵人,因此我們的attack函數便失去了攻擊的目標,不知道目標,但程序仍然要執行這一行代碼,此時就會發生圖中這樣的報錯。因此,解決的辦法就是,在執行函數前,先判斷一下我們的變量是否存在。
使用if條件判斷語句來判斷變量,如果變量為null,是一個空值,那么此時的條件就無法滿足,因為一個不存在的值是沒有辦法讓條件成立的,則下方函數就不會在變量不存在的時候被執行,避免了發生代碼錯誤。除了enemy敵人變量,像物品item之類的變量,在被函數使用之前,也都需要使用if來檢查一下,避免發生報錯,因此,本關的正確通關代碼。