通過之前的講解,了解了一些相關原理和基本的控制方法。接下來就可以開始編寫「飛機大戰」了。開始之前,先說一說,為什麼要以物件化程式設計,之前的例子裡的指令碼,都是以過程化編寫,而實際開發則以物件化為主。
這裡把飛機移動的指令碼,按物件化重新編寫,右邊是原來的指令碼。乍一看,物件化好像要複雜一些。進一步觀察指令碼會發現:
1、a和b部分是實際的流程控制,a要更易於閱讀,邏輯也更清晰。
2、c部分資訊可復用,而且易於劃分模組,對於協同開發優勢明顯。
3、程式繼續編寫,c,b 部分的指令碼會逐漸增加。a只會有極少量的增加。最終b的指令碼行數會趨近於c+a的,甚至多的多。
物件化的優勢很明顯,所以我們採用物件化為主進行這個遊戲的開發。
建立基礎類
既然是物件化,首先得建立物件。玩家飛機、敵機、玩家飛機子彈、敵機機子彈、背景、按鈕、分數顯示……,都是我們需要的物件,這些物件也會有一些共同點,比如玩家飛機、敵機、子彈、背景,都是和座標來建立。當然也會有一些不同,比如玩家飛機子彈往上移動,敵機機子彈往下移動。那麼我們就可以先建立一些基類,需要的時候,繼承它在增加一些特性就可以了。
這個遊戲最多的素材是,那麼我們可以把載入和顯示封裝成乙個基類 「base」
class
base
(object):
def__init__
(self, pygame_screen, postion, image_name)
: self.x,self.y = postion #左上角座標(x,y)
self.screen = pygame_screen #su***ce物件
self.image = pygame.image.load(image_name)
#讀取 self.w, self.h = self.image.get_size(
)#獲取的寬度和高度
把顯示文字資訊(顯示得分、版本資訊、作者資訊等等)封裝成基類 「showtext」
class
showtext
(object):
# 文字資訊基類
def__init__
(self,screen_temp,text,font,color,postion)
: self.text = text
self.postion = postion
self.screen = screen_temp
self.font = font #字型
self.fontcolor = color #字型顏色
defdisplay
(self)
:
self.fontobj = pygame.font.font(self.font,
18)
self.showscores = self.fontobj.render(self.text,
true
, self.fontcolor)
self.showscoresobj = self.showscores.get_rect(
) self.showscoresobj.center = self.postion
self.screen.blit(self.showscores, self.showscoresobj)
本篇講解了物件化程式設計在遊戲開發中的優勢,並嘗試建立基類。接下來會以遊戲的各個階段為主線,來講解相關物件、函式的建立及呼叫方法。 pygame飛機大戰開發實錄10
首先觀察之前的指令碼,main 函式586 696共110行,閱讀起來還是比較費勁。經過完善,壓縮到了26行,結構也非常清晰,而且本次修改,還新增了很多新效果,比如敵機boss花式子彈 更完善的狀態顯示 敵機重新整理機制 之前的音效 背景 預設音量太大了,先給playsound函式加一句,讓耳朵清淨...
pygame飛機大戰3
self.destroy images.extend pygame.image.load images enemy1 down1.png convert alpha pygame.image.load images enemy1 down2.png convert alpha pygame.imag...
pygame飛機大戰4
pygame.mask.from su ce self,image 對的非透明部分做標記 pygame.sprite.spritecollide b,enemies,false,pygame.sprite.collide mask 完美檢測碰撞 me.rect.midtop,子彈生成在飛機的中間的頂...