手把手教你用Python改造一款外星人入侵小游戲
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
大家好,我是白小純。這是我在【Python爬蟲與數(shù)據(jù)挖掘】公眾號(hào)的第二篇文章,第一篇文章寫的是冰冰女神,反響非常不錯(cuò),沒來得及圍觀的小伙伴,可以戳文章:手把手教你用Python網(wǎng)絡(luò)爬蟲+自動(dòng)化來創(chuàng)建一位屬于你自己的虛擬女票(附源碼),覺得不錯(cuò),記得三連支持噢!
前言
很多朋友都是從python編程:從入門到實(shí)踐開始的python學(xué)習(xí),這本書還是比較適合初學(xué)者的。

對(duì)于初學(xué)者來說,從小游戲入手去學(xué)python是個(gè)很不錯(cuò)的選擇,然而我覺得此書中的外星人入侵小游戲太過單調(diào)和粗糙,所以靈光一閃決定將其升級(jí)為超級(jí)魔改版。
本文先按照此書給出該游戲的原始1.0版本和原始1.0版本完整代碼,然后然后逐步分析并將其魔改為全新版本。
比起單調(diào)無趣的原始版本,魔改版除了基本玩法還是個(gè)射擊游戲,幾乎看不出來和原始版本有什么關(guān)系。
這篇文章主要分為三個(gè)部分進(jìn)行展開:
一、原始版本再現(xiàn)1.原始1.0版本的源碼免費(fèi)獲取地址:二、魔改思路1.醒目亮眼的UI界面2.實(shí)現(xiàn)地圖,怪物,血量多樣化3.實(shí)現(xiàn)游戲商城和豐富金融體系三、未完待續(xù)
一、原始版本再現(xiàn)
原始1.0版本:

原始1.0版本有如下特點(diǎn):
1.玩家可以控制屏幕底下的炮口(書中說是飛船)左右移動(dòng)并射擊僵尸2.僵尸群固定3排,固定數(shù)量,固定間距生成,不會(huì)隨著關(guān)卡升級(jí)而變化3.玩家有3條生命,左上角代表剩余生命,被僵尸群碰到或尸群到達(dá)屏幕底部則生命-14.玩家每次射擊都要按一下射擊鍵(這里是空格),不能連續(xù)射擊5.尸群作為一個(gè)整體左右移動(dòng)碰到屏幕邊緣便前進(jìn)一步,如果不能及時(shí)消滅尸群最邊緣的僵尸,那么尸群將會(huì)移動(dòng)得很快6.只有一種怪物,而且怪物沒有設(shè)置血量,關(guān)卡升級(jí)只是怪物左右橫移變快7.玩法單調(diào),沒有特效,沒有技能,沒有道具,沒有地圖8.不能實(shí)現(xiàn)分?jǐn)?shù)存儲(chǔ),每次運(yùn)行程序時(shí)的最高分記錄不會(huì)保存
只能說原始1.0版本實(shí)現(xiàn)了一個(gè)小游戲的基本框架,如下圖:

此時(shí)左上角有3個(gè)大炮的圖標(biāo),意為我還有3條生命。
屏幕上方中央是最高分,屏幕最右上角是當(dāng)前分?jǐn)?shù),由于這是運(yùn)行程序后的第一次游戲,當(dāng)前分即最高分。
屏幕最右上角當(dāng)前分?jǐn)?shù)的下面的數(shù)字是當(dāng)前關(guān)卡,消滅全部僵尸進(jìn)入下一關(guān),隨著關(guān)卡的升級(jí)尸群的移動(dòng)速度會(huì)越來越快。

被僵尸群碰到或尸群到達(dá)屏幕底部則生命會(huì)減一哦,上圖就只剩下2條命了。
原始1.0版本要用到的文件如下:

其中分門別類,各文件都有其明確分工,alien是專門寫外星人的,alien_invasion是主程序,bullet是控制子彈及相關(guān)參數(shù)的,button是控制開始游戲按鈕,game_stats是游戲的一些初始化設(shè)置,scoreboard是控制分?jǐn)?shù)面板,settings用于游戲參數(shù)設(shè)置,ship專門控制飛船。
原始1.0版本要用到的圖片也非常簡(jiǎn)單,存在images里面,只有一個(gè)外星人和一個(gè)飛船,這里我用的是一個(gè)僵尸和一個(gè)大炮。你也可以選用自己喜歡的形象替換。

原始1.0版本的源碼免費(fèi)獲取地址:
https://download.csdn.net/download/x978404178/20299596?spm=1001.2014.3001.5501 二、魔改思路
本文將初步推出魔改后的版本,不妨記為魔改2.0版。
1. 醒目亮眼的UI界面
通過精心設(shè)計(jì)的登錄封面,游戲取名星際前線,并達(dá)到如下效果:

此登錄界面支持鼠標(biāo)點(diǎn)擊開始游戲按鈕即開始游戲,鼠標(biāo)點(diǎn)擊或按下鍵盤s鍵可進(jìn)入/退出積分商城,鼠標(biāo)點(diǎn)擊聯(lián)系我們可以看到作者信息。
部分代碼:
self.color=(230,230,230)self.fm = pygame.image.load('images/fm.png').convert_alpha()self.title = pygame.image.load('images/title.png').convert_alpha()self.titlerect = pygame.Rect(-190, -60, 1920, 1000) # 矩形(x,y,width,height)self.play = pygame.image.load('images/play.png').convert_alpha()self.playrect = pygame.Rect(645,300, 280, 280)#矩形(x,y,width,height)self.shop = pygame.image.load('images/shop.png').convert_alpha()self.shoprect = pygame.Rect(0, 700, 330, 158) # 矩形(x,y,width,height)self.lianxi1 = pygame.image.load('images/lianxi1.png').convert_alpha()self.lianxi1rect = pygame.Rect(1330, 780, 187, 80) # 矩形(x,y,width,height)self.shop2 = pygame.image.load('images/shop2.png').convert_alpha()self.shop2rect = pygame.Rect(1395, 735, 140, 126) # 矩形(x,y,width,height)
2.實(shí)現(xiàn)地圖,怪物,血量多樣化
所有怪物生成數(shù)量與關(guān)卡有關(guān),生成數(shù)量在一定限度內(nèi)隨機(jī),但關(guān)卡越高,生成數(shù)量趨向于越多。
怪物生成范圍也為一定限度內(nèi)隨機(jī)生成。
怪物移動(dòng)速度與關(guān)卡有關(guān),關(guān)卡越高,前進(jìn)速度越快,但設(shè)置了一個(gè)速度上限。
怪物以一定概率在一個(gè)身位內(nèi)瞬移移動(dòng),可以閃避飛船的子彈。

第一關(guān)是可愛的小機(jī)器人,1點(diǎn)血量,在第三關(guān)出現(xiàn)了手拿盾牌的機(jī)器人,3點(diǎn)血量。

在第5關(guān)出現(xiàn)了BOSS,上方是它的紅色血條,很長(zhǎng)。
BOSS嘛,不抗揍怎么當(dāng)老大?

我在游戲中設(shè)置了豐富的地圖,每10關(guān)切換一個(gè)場(chǎng)景。

BOSS的安排遵循每5關(guān)一小boss,每10關(guān)一大BOSS的規(guī)律,讓玩家盡情體驗(yàn)激戰(zhàn)。
部分代碼:
def _create_fleet(self):"創(chuàng)建怪物群1"self.alien_bloodmax=1self.alien_blood=1if self.stats.level>=5:self.alien_bloodmax =2self.alien_blood = 2if self.stats.level >=10:self.alien_bloodmax = 3self.alien_blood = 3if self.stats.level >=15:self.settings.guainum = 2self.alien_bloodmax =5self.alien_blood =5if self.stats.level >=25:self.alien_bloodmax =10self.alien_blood =10if self.stats.level >= 30:self.alien_bloodmax = 20self.alien_blood = 20if self.stats.level >= 40:self.settings.guainum = 3self.alien_bloodmax = 50self.alien_blood = 50if self.stats.level >= 45:self.alien_bloodmax = 100self.alien_blood = 100if self.stats.level >= 50:self.alien_bloodmax = 150self.alien_blood = 150number_alien=random.randint(5+self.stats.level*1,15+self.stats.level*2)for row_number in range(number_alien):alien = Alien(self)self.aliens.add(alien)
3.實(shí)現(xiàn)游戲商城和豐富金融體系

怎么樣,小白作者自己一點(diǎn)點(diǎn)做出來的游戲商城還看得過去吧?
左上角是金幣,與游戲中殺怪獲得的積分掛鉤。
右上角是鉆石,顧名思義,是屬于氪金大佬和少數(shù)精英玩家的稀缺資源。
鼠標(biāo)移動(dòng)到對(duì)應(yīng)商品上會(huì)顯示半透明的簡(jiǎn)介,名稱,價(jià)格,類別和功能。
加載圖片和位置:
self.gaosi1 = pygame.image.load('images/gaosi1.png').convert_alpha()self.gaosi1rect = pygame.Rect(230, 480, 751, 240) # 矩形(x,y,width,height)
由鼠標(biāo)位置確定是否顯示商品簡(jiǎn)介:
button3_clicked = self.gaosirect.collidepoint(mouse_pos)if button3_clicked:self.screen.blit(self.gaosi1, self.gaosi1rect)
至于魔改版的更多講解和源碼我們留到以后講解。
三、總結(jié)
本期奇思妙想之超級(jí)魔改版外星人入侵小游戲-01就到這里了,感興趣的朋友可以關(guān)注我,后期會(huì)相應(yīng)推出奇思妙想-02-03等系列文章。
對(duì)本游戲有更好想法的朋友也可以提出你的魔改思路,讓游戲變得更有趣更好玩,讓大家創(chuàng)新思維的火花盡情地碰撞。想要你的魔改方案實(shí)施在游戲中,可以在下方評(píng)論區(qū)留言或私信作者哦。
------------------- End -------------------
往期精彩文章推薦:

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬水千山總是情,點(diǎn)個(gè)【在看】行不行
/今日留言主題/
隨便說一兩句吧~~
