Python有著三種不同的模塊類型,今天的游戲可以幫你更好地理解這一知識。
第一種是系統(tǒng)庫中存放的模塊,第二種是第三方模塊,最后一種是自定義模塊。自定義模塊相當于Scratch中的自制積木,為了避免一個主程序的代碼過于復雜,會將一些函數(shù)或功能單獨寫在另一個文件中,然后通過主程序調(diào)用這些自定義模塊,來完成程序。注意自定義的模塊保存要以.py的后綴名結(jié)尾。
我們用Python做一個發(fā)牌游戲來練習自定義模塊,一副撲克有54張撲克牌,除去大小王還有52張,系統(tǒng)將52張牌隨機發(fā)給4個人,并在屏幕上顯示每位牌手的牌。
52張不同花色不同數(shù)字的牌我們不可能一個一個手動輸入存在列表中,我們需要運用一些技巧進行分配:在自定義模塊中按照數(shù)字分配,梅花0-12,方塊13-25,紅桃26-38,黑桃39-51的順序存儲在pocker列表中(未洗牌之前),發(fā)牌時將52張牌分發(fā)給4個人,每人分得13張,用13輪循環(huán)按照順序?qū)⑴萍拥剿膫€牌手的列表中。
發(fā)牌的動作用函數(shù)main()實現(xiàn),發(fā)一張牌的動作可以包含兩個部分,第一個是獲取花色,第二個是獲取數(shù)值,分別用get_clolor和get_value自定義模塊來實現(xiàn)。
首先我們來完成這兩個自定義模塊部分,分別是獲取花色get_clolor和獲取數(shù)值get_value模塊。
獲取花色,獲取花色的方法比較簡單,在相應(yīng)的取值范圍之間獲得相應(yīng)的花色就可以(圖1)。
獲取數(shù)值,獲取撲克牌數(shù)值需要我們根據(jù)情況分別處理,由于撲克牌存在AJQK幾個不是數(shù)字的情形,所以在獲取數(shù)字后我們也要做出一定的轉(zhuǎn)換將0轉(zhuǎn)換成A,將10換成J,將11換成Q,將12換成K,因為4個花色的原因一共需要將16個數(shù)字分別對應(yīng)AJQK,剩余的數(shù)字可以通過與13取余(n%13)得到對應(yīng)的結(jié)果(圖2)。
成功解決了數(shù)字和花色的問題后別忘記以.py后綴保存在文本文件中(get_color.py和get_value.py)。
接下來完善主程序,首先用import導入我們剛剛定義好的自定義模塊get_color和get_value,緊接著在主函數(shù)中創(chuàng)建一個list列表用來存放52個數(shù)字(0-51),利用random內(nèi)置模塊完成對52個數(shù)字重新打亂當作洗牌的過程,返回到list列表中,洗牌結(jié)束后將列表按照次序分別分配給四個牌手,完成發(fā)牌的過程后,每個牌手能夠分得13張數(shù)字(前13個數(shù)字分給牌手1,接下來13個數(shù)字分給牌手2……),每個牌手得到分配的數(shù)字后根據(jù)自定義模塊將數(shù)字進行對應(yīng)的轉(zhuǎn)化。最終得出相應(yīng)不同花色和不同的數(shù)值(圖3)。
通過發(fā)牌游戲我們可以學習到如何創(chuàng)建自定義模塊以及模塊的使用方法,使用中需要體會這種解決問題的思路,在Scratch中我們同樣可以運用到這種思維。如果大家有Python基礎(chǔ)還可以增加添加圖片功能,根據(jù)每位牌手的牌展現(xiàn)出對應(yīng)的撲克牌圖片。