極客戰記地牢里的關卡主要是偏向鍛煉用戶的基本語法結構和計算機思維,讓大家熟悉極客戰記的操作與代碼的使用。來到了森林,關卡將會變得更多更難,同樣,到了森林,大家就正式開始接觸編程的幾大重要知識點:條件判斷、運算符、函數、對象屬性。
一、邊地之牢
這一關涉及的編程知識為:函數和 參數,大家需要理解函數及其參數是什么東西,究竟需要如何使用,即可順利過關。
進入本關,剛開始如果你不太明白這一關需要英雄做什么,那么你可以直接點擊運行按鈕,來觀察游戲過程,你需要找到兩個要點:現有的代碼是在讓英雄干什么?游戲是為什么失敗的,那么我們應該怎么做?
這是在默認代碼下的運行情況,可以知道:默認代碼的作用,就是讓英雄循環往返于上方的兩個點,上方的敵人一出現,就被英雄消滅了。但英雄沒有前往下方,導致下方的敵人擊殺了村民,游戲失敗。因此我們可以照著現有的代碼略作改動,增加一段攻擊下方敵人的代碼。因此,此時的通關思路為:理解現有代碼,對現有代碼略作改動,需要實現的功能是:巡邏保衛下方村民安全。
觀察代碼,在以往我們的代碼都是僅有一個代碼塊,一個While True無限循環代碼塊包括了所有的運行代碼塊,而本關,除了While True代碼塊以外,還多了一塊代碼,它就是def函數代碼塊。
二、函數
函數是我們在上一關接觸到的知識點,在Python里,我們使用關鍵字 def 來定義一個函數:關鍵字def是英文單詞define的縮寫,具有定義、明確的意思,我們創建一個函數,也叫定義一個函數。創建函數的格式如下:
def 函數名,即函數里的代碼,也叫函數體。可以看到,我們創建函數的時候,使用了冒號,為函數創建了一個單獨的代碼塊。如果不記得代碼塊的概念了,可以點擊鏈接,回到地牢復習一下:極客戰記[地牢]:迷失在書庫-通關代碼及講解,調用函數的格式則是:函數名(),十分簡單。
函數的作用:如果你有一段非常方便的代碼,例如尋找敵人攻擊敵人,那你要在每個可能有敵人的地方,都寫一遍這一段代碼,十分繁瑣。
而函數,就是一個偷懶的工具,我們可以把它想象成一個機器人,我們在機器人的程序里(函數體內)寫好代碼,當我們需要使用這段代碼時,呼叫機器人的名字(函數名加括號),就能叫出這機器人來幫忙,而不需要總是寫一大串同樣的代碼了。
也因此,函數內的代碼,它在沒被調用時,是不會執行的。就像圖中的函數checkAndAttack,雖然它的代碼在最上面,但它的代碼不會被執行,而是直接跳過,當后面有需要調用函數時,才運行這一段代碼。了解了函數以后,我們再來了解一下參數。
三、參數
我們剛剛說,函數就像一個機器人,代碼寫在機器人的程序里,因此我們可以這么理解,函數和其他的代碼,它們是互不相關的,機器人的程序(函數)和正常運行的代碼,是兩個相互獨立的程序。
因此,我們在正常運行的代碼里寫的一些變量,它們是不能直接使用到函數里的,因為它們是互不相關的兩個程序。而參數,就是幫我們把外界變量傳入函數內的工具。
創建參數的方法:def 函數名(參數名),直接在函數名的括號內寫上你要創建的參數名即可,你還可以創建不止一個參數:def 函數名(參數名1,參數名2,參數名3……):參數就是一個變量,它是專門用在函數里的,你可以提前寫好它們各自要做的工作:
def Test(t1,t2):
hero.attack(t1)
hero.say(t2)
然后我們再按順序,在調用的時候把我們的變量傳入參數里:
def Test(t1,t2):
hero.attack(t1)
hero.say(t2)
enemy1 = hero.findNearest
Enemy()
word = "你好!"
Test(enemy1,word)
Test(enemy1,word),就是把enemy1作為t1,word作為t2傳入了Test函數里,這樣此時執行Test函數的時候,英雄就是去攻擊enemy1,并說“你好!”
明白了這兩個知識點以后,我們再看到關卡里的代碼:此時我們就知道,上方一個代碼塊,是系統已經幫我們寫好的攻擊敵人,并回到中心點的代碼塊,無需修改。那么我們以目前while True內的代碼作為模板,寫出攻擊底部敵人的代碼:移動到下方X標記處。
到達下方后,尋找最近的敵人,使用checkAndAttack()函數攻擊下方新找到的敵人,通關代碼。