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