數橙科學的Python課程包含了極客戰記,想學習的同學可以直接添加數橙公眾號咨詢老師。本章森林地牢里的關卡主要是偏向鍛煉用戶的基本語法結構和計算機思維,讓大家熟悉極客戰記的操作與代碼的使用。來到了森林,關卡將會變得更多更難,同樣,到了森林,大家就正式開始接觸編程的幾大重要知識點:條件判斷、運算符、函數、對象屬性。
一、邊地僵局關卡簡介
邊地僵局(圖1)可以說是被提問次數最多的關卡之一,關卡涉及的編程知識是條件判斷與函數的運用,其實難度并不高,本關的過關代碼甚至與上一關一模一樣,但在之前許多同學常常為了過關速度,只是填了代碼就走,并沒有理解代碼的作用,導致再遇到一樣的代碼內容時就不懂得如何填寫了。
如果你在這一關中卡關了,那么你或許該好好反省一下自己的學習方式了:游戲上下文的代碼是否都有認真閱讀?填寫完代碼后是否理解各代碼的作用?
二、思路講解
與往常的其他關卡一樣,本關也是直接按照注釋(圖2)提示填補代碼即可。根據第7行注釋提示的if語句,還有第11行的else,我們能夠快速地分析出,這是一段雙分支判斷語句(if-else)。
知識點在于雙分支判斷語句(if-else),它的代碼格式為(圖3):
if 條件:
代碼語句1
else:
代碼語句2
它是一個雙分支語句,你可以理解成一個岔路口,有兩條路供你前行。如果if后的條件滿足,則執行if代碼塊下的代碼語句1如果不滿足,則執行else代碼塊下的代碼語句2。代碼塊的概念我們上次在講解關卡“迷失在書庫”時有講解過。
此時我們已經知道關卡這里是要我們填寫一個雙分支語句,那么條件和對應的語句呢?
對于條件,第7七行的注釋是(圖4):使用isReady語句來檢查“cleave”。isReady是什么?這是我們在關卡“森林劈砍者中”接觸到的新函數:
如果不了解它的使用,你可以在中間的函數欄中找到它(圖5),點擊查看它的介紹:它的作用是檢查一個動作是否可以使用,在“森林劈砍者”中,它是作為if后的條件來使用的,因為它是一個有返回值的函數。
三、什么是返回值
返回值是什么?我來問大家一個問題,hero.attack(enemy)和hero.findNearestEnemy(),在使用的時候有什么區別?hero.attack()函數,括號內必須要有東西,而hero.findNearestEnemy()則不用。
并且hero.attack(),大家明顯可以看到它是一個動作,執行完以后英雄會進行攻擊。而hero.findNearestEnemy()使用完以后,似乎什么也沒有發現,且必須這么使用,一定要用在變量的賦值里。
這是因為它也是一個有返回值的函數,大家對它已經十分熟悉了,知道它的作用是找到最近的一個敵人,把它的名字賦入變量之中。它的返回值,就是敵人的名字。因此必須要用一個變量來承接它的返回值。
hero.isReady()也是如此,它用來檢查一個動作是否可以使用,是否——返回的是布爾型的返回值。布爾型就是:0和1,True和False。看起來有點難懂,直接翻譯來說,真和假,是和否,就是布爾型。
等于這個函數返回的結果是,檢查的動作 可以使用 或 不可以使用。所以可以直接放在if后面,作為條件來使用。當然你使用變量來承接也是一樣的。知道了這兩個知識點以后,此時的過關思路已非常清晰了:編寫一個雙分支語句,當劈斬準備好了,執行劈斬,劈斬沒準備好,直接攻擊。通關代碼如圖6。