手把手教你用Python改造一款外星人入侵小游戲
前言
這篇文章主要分為三個部分進(jìn)行展開:
一、原始版本再現(xiàn)
原始1.0版本:
原始1.0版本有如下特點:
1.玩家可以控制屏幕底下的炮口(書中說是飛船)左右移動并射擊僵尸
2.僵尸群固定3排,固定數(shù)量,固定間距生成,不會隨著關(guān)卡升級而變化
3.玩家有3條生命,左上角代表剩余生命,被僵尸群碰到或尸群到達(dá)屏幕底部則生命-1
4.玩家每次射擊都要按一下射擊鍵(這里是空格),不能連續(xù)射擊
5.尸群作為一個整體左右移動碰到屏幕邊緣便前進(jìn)一步,如果不能及時消滅尸群最邊緣的僵尸,那么尸群將會移動得很快
6.只有一種怪物,而且怪物沒有設(shè)置血量,關(guān)卡升級只是怪物左右橫移變快
7.玩法單調(diào),沒有特效,沒有技能,沒有道具,沒有地圖
8.不能實現(xiàn)分?jǐn)?shù)存儲,每次運行程序時的最高分記錄不會保存
只能說原始1.0版本實現(xiàn)了一個小游戲的基本框架,如下圖:
此時左上角有3個大炮的圖標(biāo),意為我還有3條生命。
屏幕上方中央是最高分,屏幕最右上角是當(dāng)前分?jǐn)?shù),由于這是運行程序后的第一次游戲,當(dāng)前分即最高分。
屏幕最右上角當(dāng)前分?jǐn)?shù)的下面的數(shù)字是當(dāng)前關(guān)卡,消滅全部僵尸進(jìn)入下一關(guān),隨著關(guān)卡的升級尸群的移動速度會越來越快。
被僵尸群碰到或尸群到達(dá)屏幕底部則生命會減一哦,上圖就只剩下2條命了。
原始1.0版本要用到的文件如下:
其中分門別類,各文件都有其明確分工,alien是專門寫外星人的,alien_invasion是主程序,bullet是控制子彈及相關(guān)參數(shù)的,button是控制開始游戲按鈕,game_stats是游戲的一些初始化設(shè)置,scoreboard是控制分?jǐn)?shù)面板,settings用于游戲參數(shù)設(shè)置,ship專門控制飛船。
原始1.0版本要用到的圖片也非常簡單,存在images里面,只有一個外星人和一個飛船,這里我用的是一個僵尸和一個大炮。你也可以選用自己喜歡的形象替換。
原始1.0版本的源碼免費獲取地址:
https://download.csdn.net/download/x978404178/20299596?spm=1001.2014.3001.5501
二、魔改思路
本文將初步推出魔改后的版本,不妨記為魔改2.0版。
1. 醒目亮眼的UI界面
通過精心設(shè)計的登錄封面,游戲取名星際前線,并達(dá)到如下效果:
此登錄界面支持鼠標(biāo)點擊開始游戲按鈕即開始游戲,鼠標(biāo)點擊或按下鍵盤s鍵可進(jìn)入/退出積分商城,鼠標(biāo)點擊聯(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.實現(xiàn)地圖,怪物,血量多樣化
所有怪物生成數(shù)量與關(guān)卡有關(guān),生成數(shù)量在一定限度內(nèi)隨機,但關(guān)卡越高,生成數(shù)量趨向于越多。
怪物生成范圍也為一定限度內(nèi)隨機生成。
怪物移動速度與關(guān)卡有關(guān),關(guān)卡越高,前進(jìn)速度越快,但設(shè)置了一個速度上限。
怪物以一定概率在一個身位內(nèi)瞬移移動,可以閃避飛船的子彈。
第一關(guān)是可愛的小機器人,1點血量,在第三關(guān)出現(xiàn)了手拿盾牌的機器人,3點血量。
在第5關(guān)出現(xiàn)了BOSS,上方是它的紅色血條,很長。
BOSS嘛,不抗揍怎么當(dāng)老大?
我在游戲中設(shè)置了豐富的地圖,每10關(guān)切換一個場景。
BOSS的安排遵循每5關(guān)一小boss,每10關(guān)一大BOSS的規(guī)律,讓玩家盡情體驗激戰(zhàn)。
部分代碼:
- def _create_fleet(self):
- "創(chuàng)建怪物群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.實現(xiàn)游戲商城和豐富金融體系
怎么樣,小白作者自己一點點做出來的游戲商城還看得過去吧?
左上角是金幣,與游戲中殺怪獲得的積分掛鉤。
右上角是鉆石,顧名思義,是屬于氪金大佬和少數(shù)精英玩家的稀缺資源。
鼠標(biāo)移動到對應(yīng)商品上會顯示半透明的簡介,名稱,價格,類別和功能。
加載圖片和位置:
- self.gaosi1 = pygame.image.load('images/gaosi1.png').convert_alpha()
- self.gaosi1rect = pygame.Rect(230, 480, 751, 240) # 矩形(x,y,width,height)
由鼠標(biāo)位置確定是否顯示商品簡介:
- button3_clicked = self.gaosirect.collidepoint(mouse_pos)
- if button3_clicked:
- self.screen.blit(self.gaosi1, self.gaosi1rect)
至于魔改版的更多講解和源碼我們留到以后講解。
三、總結(jié)
本期奇思妙想之超級魔改版外星人入侵小游戲-01就到這里了。
對本游戲有更好想法的朋友也可以提出你的魔改思路,讓游戲變得更有趣更好玩,讓大家創(chuàng)新思維的火花盡情地碰撞。
【編輯推薦】