手把手教你用Python改造一款外星人入侵小遊戲

點擊上方“ Python爬蟲與數據挖掘 ”,進行關注

回覆“書籍”即可獲贈Python從入門到進階共10本電子書

爲學應須畢生力,攀高貴在少年時。

大家好,我是白小純。這是我在【Python爬蟲與數據挖掘】公衆號的第二篇文章,第一篇文章寫的是冰冰女神,反響非常不錯,沒來得及圍觀的小夥伴,可以戳文章:手把手教你用Python網絡爬蟲+自動化來創建一位屬於你自己的虛擬女票(附源碼),覺得不錯,記得三連支持噢!

前言

    很多朋友都是從python編程:從入門到實踐開始的python學習,這本書還是比較適合初學者的。

之前公衆號也送過這本書,沒有收到的小夥伴也別灰心,送書活動基本上每週的週六或者週日都會進行,大家記得來參加就是了。

言歸正傳,而在這本書中有一個pygame小遊戲項目,外星人入侵。

對於初學者來說,從小遊戲入手去學python是個很不錯的選擇,然而我覺得此書中的外星人入侵小遊戲太過單調和粗糙,所以靈光一閃決定將其升級爲超級魔改版。


本文先按照此書給出該遊戲的原始1.0版本和原始1.0版本完整代碼,然後然後逐步分析並將其魔改爲全新版本。


比起單調無趣的原始版本,魔改版除了基本玩法還是個射擊遊戲,幾乎看不出來和原始版本有什麼關係。


這篇文章主要分爲三個部分進行展開:

一、原始版本再現  1.原始1.0版本的源碼免費獲取地址:二、魔改思路  1.醒目亮眼的UI界面  2.實現地圖,怪物,血量多樣化  3.實現遊戲商城和豐富金融體系 三、未完待續


一、原始版本再現

原始1.0版本:

原始1.0版本有如下特點:

1.玩家可以控制屏幕底下的炮口(書中說是飛船)左右移動並射擊殭屍2.殭屍羣固定3排,固定數量,固定間距生成,不會隨着關卡升級而變化3.玩家有3條生命,左上角代表剩餘生命,被殭屍羣碰到或屍羣到達屏幕底部則生命-14.玩家每次射擊都要按一下射擊鍵(這裏是空格),不能連續射擊5.屍羣作爲一個整體左右移動碰到屏幕邊緣便前進一步,如果不能及時消滅屍羣最邊緣的殭屍,那麼屍羣將會移動得很快6.只有一種怪物,而且怪物沒有設置血量,關卡升級只是怪物左右橫移變快7.玩法單調,沒有特效,沒有技能,沒有道具,沒有地圖8.不能實現分數存儲,每次運行程序時的最高分記錄不會保存

只能說原始1.0版本實現了一個小遊戲的基本框架,如下圖:

此時左上角有3個大炮的圖標,意爲我還有3條生命。


屏幕上方中央是最高分,屏幕最右上角是當前分數,由於這是運行程序後的第一次遊戲,當前分即最高分。


屏幕最右上角當前分數的下面的數字是當前關卡,消滅全部殭屍進入下一關,隨着關卡的升級屍羣的移動速度會越來越快。

被殭屍羣碰到或屍羣到達屏幕底部則生命會減一哦,上圖就只剩下2條命了。


原始1.0版本要用到的文件如下:

其中分門別類,各文件都有其明確分工,alien是專門寫外星人的,alien_invasion是主程序,bullet是控制子彈及相關參數的,button是控制開始遊戲按鈕,game_stats是遊戲的一些初始化設置,scoreboard是控制分數面板,settings用於遊戲參數設置,ship專門控制飛船。


原始1.0版本要用到的圖片也非常簡單,存在images裏面,只有一個外星人和一個飛船,這裏我用的是一個殭屍和一個大炮。你也可以選用自己喜歡的形象替換。

原始1.0版本的源碼免費獲取地址:

https://download.csdn.net/download/x978404178/20299596?spm=1001.2014.3001.5501 


二、魔改思路

本文將初步推出魔改後的版本,不妨記爲魔改2.0版。

1. 醒目亮眼的UI界面

通過精心設計的登錄封面,遊戲取名星際前線,並達到如下效果:

 此登錄界面支持鼠標點擊開始遊戲按鈕即開始遊戲,鼠標點擊或按下鍵盤s鍵可進入/退出積分商城,鼠標點擊聯繫我們可以看到作者信息。


部分代碼:

        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.實現地圖,怪物,血量多樣化

所有怪物生成數量與關卡有關,生成數量在一定限度內隨機,但關卡越高,生成數量趨向于越多。


怪物生成範圍也爲一定限度內隨機生成。


怪物移動速度與關卡有關,關卡越高,前進速度越快,但設置了一個速度上限。


怪物以一定概率在一個身位內瞬移移動,可以閃避飛船的子彈。

第一關是可愛的小機器人,1點血量,在第三關出現了手拿盾牌的機器人,3點血量。

在第5關出現了BOSS,上方是它的紅色血條,很長。


BOSS嘛,不抗揍怎麼當老大?

我在遊戲中設置了豐富的地圖,每10關切換一個場景。

BOSS的安排遵循每5關一小boss,每10關一大BOSS的規律,讓玩家盡情體驗激戰。


部分代碼:

    def _create_fleet(self):        "創建怪物羣1"        self.alien_bloodmax=1        self.alien_blood=1        if self.stats.level>=5:            self.alien_bloodmax =2            self.alien_blood = 2            if self.stats.level >=10:                self.alien_bloodmax = 3                self.alien_blood = 3                 if self.stats.level >=15:                    self.settings.guainum = 2                    self.alien_bloodmax =5                    self.alien_blood =5                    if self.stats.level >=25:                        self.alien_bloodmax =10                        self.alien_blood =10                        if self.stats.level >= 30:                            self.alien_bloodmax = 20                            self.alien_blood = 20                             if self.stats.level >= 40:                                self.settings.guainum = 3                                self.alien_bloodmax = 50                                self.alien_blood = 50                                if self.stats.level >= 45:                                    self.alien_bloodmax = 100                                    self.alien_blood = 100                                    if self.stats.level >= 50:                                        self.alien_bloodmax = 150                                        self.alien_blood = 150        number_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.實現遊戲商城和豐富金融體系

怎麼樣,小白作者自己一點點做出來的遊戲商城還看得過去吧?


左上角是金幣,與遊戲中殺怪獲得的積分掛鉤。


右上角是鑽石,顧名思義,是屬於氪金大佬和少數精英玩家的稀缺資源。


鼠標移動到對應商品上會顯示半透明的簡介,名稱,價格,類別和功能。


加載圖片和位置:

self.gaosi1 = pygame.image.load('images/gaosi1.png').convert_alpha()self.gaosi1rect = pygame.Rect(230, 480, 751, 240)  # 矩形(x,y,width,height)

由鼠標位置確定是否顯示商品簡介:

button3_clicked = self.gaosirect.collidepoint(mouse_pos)if button3_clicked:    self.screen.blit(self.gaosi1, self.gaosi1rect)

至於魔改版的更多講解和源碼我們留到以後講解。


 三、總結

    本期奇思妙想之超級魔改版外星人入侵小遊戲-01就到這裏了,感興趣的朋友可以關注我,後期會相應推出奇思妙想-02-03等系列文章。


    對本遊戲有更好想法的朋友也可以提出你的魔改思路,讓遊戲變得更有趣更好玩,讓大家創新思維的火花盡情地碰撞。想要你的魔改方案實施在遊戲中,可以在下方評論區留言或私信作者哦。


------------------- End -------------------

往期精彩文章推薦:

歡迎大家點贊,留言,轉發,轉載,感謝大家的相伴與支持

想加入Python學習羣請在後臺回覆【入羣

萬水千山總是情,點個【在看】行不行

/今日留言主題/

隨便說一兩句吧~~

本文分享自微信公衆號 - Python爬蟲與數據挖掘(crawler_python)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章