Python制作經(jīng)典坦克大戰(zhàn)小游戲

image.png

開發(fā)工具

Python版本:3.6.4

相關(guān)模塊:

pygame模塊;

以及一些Python自帶的模塊。

環(huán)境搭建

安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。

原理介紹

T_T感覺自己的代碼整體上邏輯還是很清晰的,也做了很多必要的注釋,所以這里我只講主要的思路,一些實(shí)現(xiàn)細(xì)節(jié)請(qǐng)閱讀我的源代碼。

游戲規(guī)則:

游戲有單人和雙人兩種模式,己方大本營被破或者己方坦克被殲滅則游戲失敗,成功通過所有關(guān)卡則游戲勝利。另外,玩家可以通過射擊特定的坦克使地圖上隨機(jī)出現(xiàn)一個(gè)道具,若己方坦克撿到該道具,則觸發(fā)一個(gè)事件,例如坦克能力的增強(qiáng)。

玩家操作方式如下:

玩家一:

wsad鍵:上下左右;

空格鍵:射擊。

玩家二:

↑↓←→鍵:上下左右;

小鍵盤0鍵:射擊。

逐步實(shí)現(xiàn):

Step1:定義精靈類

因?yàn)橛螒蚩隙ㄉ婕暗脚鲎矙z測(cè),所以我們需要定義一些精靈類。

首先,既然是坦克大戰(zhàn),總得有坦克吧?

己方坦克:

image

上面的代碼定義了坦克的一些屬性,例如速度、等級(jí)、是否處于受保護(hù)狀態(tài)等等。

當(dāng)然這里也實(shí)例化了一個(gè)子彈類,這個(gè)我們之后再定義,先假裝有這個(gè)子彈類,這樣主邏輯才是完整的,不然坦克沒有子彈類怎么射擊呢?

當(dāng)然,有屬性還是不夠的,我們還要賦予坦克一些能力,例如上面所說的射擊:

image

當(dāng)然還有上下左右的移動(dòng),因?yàn)槎际穷愃频?,這里只給出向上移動(dòng)的源碼:

image

啊,還有坦克的等級(jí)提升與下降:

image

最后當(dāng)然是坦克死后重置啦:

image

敵方坦克:

敵方坦克和己方坦克定義的源代碼很相似,只不過移動(dòng)是隨機(jī)的,死后是不可復(fù)生的,就不截圖了T_T。

現(xiàn)在,我們可以來定義子彈類了!

子彈類:

子彈類應(yīng)當(dāng)具有例如速度、強(qiáng)度等屬性,以及選擇方向和移動(dòng)的能力:

image

最后,我們來定義其他涉及到碰撞檢測(cè)的物體類。

大本營:

有正常和被摧毀兩種狀態(tài):

image

地圖障礙物:

包括磚墻、鋼墻、森林、河流和冰:

image

食物道具:

一共有7種道具,不同的道具對(duì)應(yīng)不同的效果:

image

Step2:設(shè)計(jì)游戲地圖

Emmmm,游戲的大背景是黑色的,然后在上面堆上一些步驟一中定義的障礙物就可以完成地圖設(shè)計(jì)了。其中,鋼墻不能被一般的子彈擊破,磚墻可被任意子彈擊破,除墻外,坦克可以穿過任意障礙物,不過沒有任何附加效果(有興趣的小伙伴可以自己擴(kuò)展一下~比如冰上的坦克速度加快等等):

image

這邊只設(shè)計(jì)了一個(gè)地圖和兩個(gè)關(guān)卡,有興趣的小伙伴可以在此基礎(chǔ)上設(shè)計(jì)更多的地圖和關(guān)卡。

Step3:實(shí)現(xiàn)游戲主循環(huán)

主循環(huán)的代碼比較長,不過邏輯很清晰。首先展示游戲開始界面,玩家在此界面選擇游戲模式后進(jìn)入游戲;在游戲中,需要進(jìn)行一系列的碰撞檢測(cè)以及觸發(fā)碰撞產(chǎn)生的一系列事件,并繪制當(dāng)前存在的所有物體;最后,若游戲失敗,則顯示游戲失敗界面,若通關(guān),則顯示游戲成功界面

All Done!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容