python 你來(lái)制作一個(gè)游戲

2021-09-15 14:57 更新

練習(xí)45.你來(lái)制作一個(gè)游戲

你要開(kāi)始學(xué)會(huì)自食其力了。通過(guò)閱讀這本書(shū)你應(yīng)該已經(jīng)學(xué)到了一點(diǎn),那就是你需要的所有的信息網(wǎng)上都有,你只要去搜索就能找到。唯一困擾你的就是如何使用正確的詞匯進(jìn)行搜索。學(xué)到現(xiàn)在,你在挑選搜索關(guān)鍵字方面應(yīng)該已經(jīng)有些感覺(jué)了。現(xiàn)在已經(jīng)是時(shí)候了,你需要嘗試寫(xiě)一個(gè)大的項(xiàng)目,并讓它運(yùn)行起來(lái)。

以下是你的需求:

  1. 制作一個(gè)截然不同的游戲。
  2. 使用多個(gè)文件,并使用import調(diào)用這些文件。確認(rèn)自己知道import 的用法。
  3. 對(duì)于每個(gè)房間使用一個(gè) class,class 的命名要能體現(xiàn)出它的用處(例如 GoldRoomKoiPondRoom)。
  4. 你的執(zhí)行器代碼應(yīng)該了解這些房間,所以創(chuàng)建一個(gè)類(lèi)來(lái)調(diào)用并且記錄這些房間。有很多種方法可以達(dá)到這個(gè)目的,不過(guò)你可以考慮讓每個(gè)房間返回下一個(gè)房間,或者設(shè)置一個(gè)變量,讓它指定下一個(gè)房間是什么。

其他的事情就全靠你了?;ㄒ粋€(gè)星期完成這件任務(wù),做一個(gè)你能做出來(lái)的最好的游戲。使用你學(xué)過(guò)的任何東西(類(lèi),函數(shù),字典,列表……)來(lái)改進(jìn)你的程序。這節(jié)課的目的是教你如何構(gòu)建 class 出來(lái),而這些 class 又能調(diào)用到其它 Python 文件中的 class。

我不會(huì)詳細(xì)地告訴你告訴你怎樣做,你需要自己完成。試著下手吧,編程就是解決問(wèn)題的過(guò)程,這就意味著你要嘗試各種可能性,進(jìn)行實(shí)驗(yàn),經(jīng)歷失敗,然后丟掉你做出來(lái)的東西重頭開(kāi)始。當(dāng)你被某個(gè)問(wèn)題卡住的時(shí)候,你可以向別人尋求幫助,并把你的代碼貼出來(lái)給他們看。如果有人刻薄你,別理他們,你只要集中精力在幫你的人身上就可以了。持續(xù)修改和清理你的代碼,直到它完整可執(zhí)行為止,然后再研究一下看它還能不能被改進(jìn)。

祝你好運(yùn),下個(gè)星期你做出游戲后我們?cè)僖?jiàn)。

評(píng)估你的游戲

這節(jié)練習(xí)的目的是檢查評(píng)估你的游戲。也許你只完成了一半,卡在那里沒(méi)有進(jìn)行下去,也許你勉強(qiáng)做出來(lái)了。不管怎樣,我們將串一下你應(yīng)該弄懂的一些東西,并確認(rèn)你的游戲里有使用到它們。我們將學(xué)習(xí)如何用正確的格式構(gòu)建 class,使用 class 的一些通用習(xí)慣,另外還有很多的“書(shū)本知識(shí)”讓你學(xué)習(xí)。

為什么我會(huì)讓你先行嘗試,然后才告訴你正確的做法呢?因?yàn)閺默F(xiàn)在開(kāi)始你要學(xué)會(huì)“自給自足”,以前是我牽著你前行,以后就得靠你自己了。后面的習(xí)題我只會(huì)告訴你你的任務(wù),你需要自己去完成,在你完成后我再告訴你如何可以改進(jìn)你的作業(yè)。

一開(kāi)始你會(huì)覺(jué)得很困難并且很不習(xí)慣,但只要堅(jiān)持下去,你就會(huì)培養(yǎng)出自己解決問(wèn)題的能力。你還會(huì)找出創(chuàng)新的方法解決問(wèn)題,這比從課本中拷貝解決方案強(qiáng)多了。

函數(shù)的風(fēng)格

以前我教過(guò)的怎樣寫(xiě)好函數(shù)的方法一樣是適用的,不過(guò)這里要添加幾條:

  • 由于各種各樣的原因,程序員將 class (類(lèi))里邊的函數(shù)稱(chēng)作 method (方法)。很大程度上這只是個(gè)市場(chǎng)策略(用來(lái)推銷(xiāo) OOP),不過(guò)如果你把它們稱(chēng)作“函數(shù)”的話,是會(huì)有啰嗦的人跳出來(lái)糾正你的。如果你覺(jué)得他們太煩了,你可以告訴他們從數(shù)學(xué)方面演示一下“函數(shù)”和“方法”究竟有什么不同,這樣他們會(huì)很快閉嘴的。
  • 在你使用 class 的過(guò)程中,很大一部分時(shí)間是告訴你的 class 如何“做事情”。給這些函數(shù)命名的時(shí)候,與其命名成一個(gè)名詞,不如命名為一個(gè)動(dòng)詞,作為給 class 的一個(gè)命令。就和 list 的 pop (拋出)函數(shù)一樣,它相當(dāng)于說(shuō):“嘿,列表,把這東西給我 pop 出去?!彼拿植皇?code>remove_from_end_of_list ,因?yàn)榧词顾墓δ艿拇_是這樣,這一串字符也不是一個(gè)命令。
  • 讓你的函數(shù)保持簡(jiǎn)單小巧。由于某些原因,有些人開(kāi)始學(xué)習(xí) class 后就會(huì)忘了這一條。

類(lèi)的風(fēng)格

  • 你的 class 應(yīng)該使用 “camel case(駝峰式大小寫(xiě))”,例如你應(yīng)該使用 SuperGoldFactory而不是super_gold_factory。
  • 你的 __init__不應(yīng)該做太多的事情,這會(huì)讓 class 變得難以使用。
  • 你的其它函數(shù)應(yīng)該使用 “underscore format(下劃線隔詞)”,所以你可以寫(xiě)my_awesome_hair,而不是 myawesomehair或者MyAwesomeHair
  • 用一致的方式組織函數(shù)的參數(shù)。如果你的 class 需要處理 users、dogs、和 cats,就保持這個(gè)次序(特別情況除外)。如果一個(gè)函數(shù)的參數(shù)是(dog, cat, user),另一個(gè)的是(user, cat, dog) ,這會(huì)讓函數(shù)使用起來(lái)很困難。
  • 不要對(duì)全局變量或者來(lái)自模組的變量進(jìn)行重定義或者賦值,讓這些東西自顧自就行了。
  • 不要一根筋式地維持風(fēng)格一致性,這是思維力底下的妖怪嘍啰做的事情。一致性是好事情,不過(guò)愚蠢地跟著別人遵從一些白癡口號(hào)是錯(cuò)誤的行為——這本身就是一種壞的風(fēng)格。好好為自己著想吧。
  • 永遠(yuǎn)永遠(yuǎn)都使用class Name(object)的方式定義 class,否則你會(huì)碰到大麻煩。

代碼風(fēng)格

  • 為了以方便他人閱讀,為自己的代碼字符之間留下一些空白。你將會(huì)看到一些很差的程序員,他們寫(xiě)的代碼還算通順,但字符之間沒(méi)有任何空間。這種風(fēng)格在任何編程語(yǔ)言中都是壞習(xí)慣,人的眼睛和大腦會(huì)通過(guò)空白和垂直對(duì)齊的位置來(lái)掃描和區(qū)隔視覺(jué)元素,如果你的代碼里沒(méi)有任何空白,這相當(dāng)于為你的代碼上了迷彩裝。
  • 如果一段代碼你無(wú)法朗讀出來(lái),那么這段代碼的可讀性可能就有問(wèn)題。如你找不到讓某個(gè)東西易用的方法,試著也朗讀出來(lái)。這樣不僅會(huì)逼迫你慢速而且真正仔細(xì)閱讀過(guò)去,還會(huì)幫你找到難讀的段落,從而知道那些代碼的易讀性需要作出改進(jìn)。
  • 學(xué)著模仿別人的風(fēng)格寫(xiě) Python 程序,直到哪天你找到你自己的風(fēng)格為止。
  • 一旦你有了自己的風(fēng)格,也別把它太當(dāng)回事。程序員工作的一部分就是和別人的代碼打交道,有的人審美就是很差。相信我,你的審美某一方面一定也很差,只是你從未意識(shí)到而已。
  • 如果你發(fā)現(xiàn)有人寫(xiě)的代碼風(fēng)格你很喜歡,那就模仿他們的風(fēng)格。

好的注釋

  • 有程序員會(huì)告訴你,說(shuō)你的代碼需要有足夠的可讀性,這樣你就無(wú)需寫(xiě)注釋了。他們會(huì)以自己接近官腔的聲音說(shuō)“所以你永遠(yuǎn)都不應(yīng)該寫(xiě)代碼注釋。”這些人要么是一些顧問(wèn)型的人物,如果別人無(wú)法使用他們的代碼,就會(huì)付更多錢(qián)給他們讓他們解決問(wèn)題。要么他們能力不足,從來(lái)沒(méi)有跟別人合作過(guò)。別理會(huì)這些人,好好寫(xiě)你的注釋。
  • 寫(xiě)注釋的時(shí)候,描述清楚為什么你要這樣做。代碼只會(huì)告訴你“這樣實(shí)現(xiàn)”,而不會(huì)告訴你“為什么要這樣實(shí)現(xiàn)”,而后者比前者更重要。
  • 當(dāng)你為函數(shù)寫(xiě)文檔注釋的時(shí)候,記得為別的代碼使用者也寫(xiě)些東西。你不需要狂寫(xiě)一大堆,但一兩句話寫(xiě)寫(xiě)這個(gè)函數(shù)的用法還是很有用的。
  • 最后要說(shuō)的是,雖然注釋是好東西,太多的注釋就不見(jiàn)得是了。而且注釋也是需要維護(hù)的,你要盡量讓注釋短小精悍一語(yǔ)中的,如果你對(duì)代碼做了更改,記得檢查并更新相關(guān)的注釋?zhuān)_認(rèn)它們還是正確的。

為你的游戲評(píng)分

現(xiàn)在我要求你假裝成我,板起臉來(lái),把你的代碼打印出來(lái),然后拿一支紅筆,把代碼中所有的錯(cuò)誤都標(biāo)出來(lái)。你要充分利用你在本章以及前面學(xué)到的知識(shí)。等你批改完了,我要求你把所有的錯(cuò)誤改對(duì)。這個(gè)過(guò)程我需要你多重復(fù)幾次,爭(zhēng)取找到更多的可以改進(jìn)的地方。使用我前面教過(guò)的方法,把代碼分解成最細(xì)小的單元一一進(jìn)行分析。

這個(gè)練習(xí)的目的是訓(xùn)練你對(duì)于細(xì)節(jié)的關(guān)注程度。等你檢查完自己的代碼,再找一段別人的代碼用這種方法檢查一遍。把代碼打印出來(lái),檢查出所有代碼和風(fēng)格方面的錯(cuò)誤,然后試著在不改壞別人代碼的前提下把它們修改正確、

這周我要求你的事情就是批改和糾錯(cuò),包含你自己的代碼和別人的代碼,再?zèng)]有別的了。這節(jié)習(xí)題難度還是挺大,不過(guò)一旦你完成了任務(wù),你學(xué)過(guò)的東西就會(huì)牢牢記在腦中。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)