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