pygame飛機大戰開發實錄10

2021-09-23 20:35:38 字數 1478 閱讀 1154

首先觀察之前的指令碼,main()函式586-696共110行,閱讀起來還是比較費勁。

經過完善,壓縮到了26行,結構也非常清晰,而且本次修改,還新增了很多新效果,比如敵機boss花式子彈、更完善的狀態顯示、敵機重新整理機制……。

之前的音效、背景**預設音量太大了,先給playsound函式加一句,讓耳朵清淨一下。

sound.set_volume(

0.1)

def

playmusic

(musicfilename)

: pygame.mixer.music.load(musicfilename)

pygame.mixer.music.play(-1

,0) pygame.mixer.music.set_volume(

0.1)

正式開始本次指令碼的完善

一、將圖中標記的函式和main函式中的部分流程,封裝成乙個物件。

指令碼比較長,這裡就不發了,在之前提供的網盤共享會有完整原始碼。

物件結構如圖,也就是將之前的函式封裝成方法。

二、類屬性的應用

之前的子彈、補給包、敵機,是在函式中宣告了列表變數來儲存。

那麼物件中要對這些列表操作,就需要把它做為引數傳入,比如英雄飛機,要發射子彈,就要傳入這個子彈列表:

def

__init__

(self, pygame_screen, bullets)

:

而且,每次建立物件都需要操作列表

所以這裡用類屬性來替代列表變數,在有需要的類中宣告列表group,__init__方法中新增:

這樣就可以和全域性變數一樣的方便引用

修改以後要把原來需要傳的引數刪除,比如圖中的hero:

pygame飛機大戰開發實錄3

通過之前的講解,了解了一些相關原理和基本的控制方法。接下來就可以開始編寫 飛機大戰 了。開始之前,先說一說,為什麼要以物件化程式設計,之前的例子裡的指令碼,都是以過程化編寫,而實際開發則以物件化為主。這裡把飛機移動的指令碼,按物件化重新編寫,右邊是原來的指令碼。乍一看,物件化好像要複雜一些。進一步觀...

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,子彈生成在飛機的中間的頂...