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