python小遊戲 飛機大戰(3)

2021-09-25 10:56:32 字數 4712 閱讀 1424

二、新增**動畫

3、執行展示

三、遊戲結束介面

四、計分

五、提公升遊戲難度

六、總結

前兩節已經實現遊戲基本功能,接下來是對遊戲的完善,包括**動畫、計分、結束畫面等。

這個其實是在剛開始開發就需要做的,這裡是為了方便讀者理解,將其挪到遊戲基本功能完成後再進行調整。基本思路其實很簡單,就是建立時鐘物件進行管理。

建立時鐘物件並設定幀率

# 建立時鐘物件控制遊戲幀率

clock = pygame.time.clock(

)# 遊戲幀率(每秒重新整理次數)

rate =

60

主迴圈內進行設定

# 設定遊戲幀率

clock.tick(rate)

此時在執行有沒有發現遊戲速度變得巨慢,那是因為之前由於沒有設定遊戲幀率,所以遊戲重新整理速度非常快,在設定子彈發射速度時設定間隔非常大,此時改過來即可。

更改處:

# 根據計數切換飛機

if tick %

13==0:

hero.image = player_plane_images[tick %2]

# 呼叫射擊方法

if tick %

40==0:

hero.shoot(bullet_img)

另外再更改

bullet.speed=4

hero.speed=3

enemy.speed=2

即可。

**動畫其實是將幾張按照一定頻率輪換輸出形成的動畫,此節重要之處在於**動畫的位置和切換的下標,這兩個弄清楚了**動畫就很簡單了。

(1)準備工作

'載入**動畫'

# 載入**

boom_img = pygame.image.load(

'resources/images/boom.png'

)boom_img1 = boom_img.subsu***ce(pygame.rect(0,

0,71,

85))boom_img2 = boom_img.subsu***ce(pygame.rect(66,

0,71,

85))boom_img3 = boom_img.subsu***ce(pygame.rect(

131,0,

71,85)

)boom_img4 = boom_img.subsu***ce(pygame.rect(

206,0,

80,85)

)# 將**存入列表中

boom_imgs =

# 擊毀組,儲存需要展示**動畫的精靈

boom_group = pygame.sprite.group(

)

(2)敵機**

在敵機類中新增索引

self.boom_index =

0# **動畫切換標誌位

更改碰撞檢測處**

enemy_down_list = pygame.sprite.groupcollide(enemy_group, hero.bullet_group,

true

,true)if

len(enemy_down_list)

>0:

boom_group.add(enemy_down_list)

# 若發生碰撞,將碰撞的精靈加入擊毀組

繪製**動畫

# **動畫

for boom_sprite in boom_group:

# 繪製畫面

screen.blit(boom_imgs[boom_sprite.boom_index]

, boom_sprite.rect)

if tick %6==

0:if boom_sprite.boom_index <3:

boom_sprite.boom_index = boom_sprite.boom_index +

1# 更新索引

else

: boom_group.remove(boom_sprite)

# **動畫結束,將精靈移除

(3)玩家戰機**

玩家類中新增

# 是否被擊中

self.i****=

false

# **動畫切換索引

self.boom_index =

0

主迴圈中更改玩家碰撞檢測後的處理:

'''敵機與玩家碰撞處理'''

# 碰撞檢測(引數:sprite,group,後面的true是指kill掉碰撞的group內的精靈)

hero_down = pygame.sprite.spritecollide(hero, enemy_group,

true

)# 如果hero_down長度大於0,則證明玩家發生碰撞,遊戲結束

iflen

(hero_down)

>0:

# 敵機**

boom_group.add(hero_down)

# 戰機被擊中標誌位改為true

hero.i**** =

true

# 玩家**

if hero.i****:

hero.image = boom_imgs[hero.boom_index]

# 切換玩家

hero.boom_index +=

1# 更新索引

if hero.boom_index >=4:

# **動畫結束

遊戲結束就是在玩家戰機墜毀後,即程式break跳出主迴圈後再在介面繪製出遊戲結束介面。

載入

# 載入遊戲結束

gameover_img = pygame.image.load(

'resources/images/fail.png'

)

在主迴圈後新增

# 繪製遊戲結束

screen.blit(gameover_img,(0

,0))

# 更新畫面

pygame.display.update(

)# 用乙個while迴圈,可停留在最後這個畫面

while

true

:# 處理退出

for event in pygame.event.get():

if event.

type

== pygame.quit:

pygame.quit(

) exit(

)

計分規則按照每擊落一架飛機一分計算,將分數繪製到介面即可。

設定字型及初始化分數(設定字型一定要在pygame.init()後進行)

'分數相關'

# 可用下面方法列印可用字型

# print(pygame.font.get_fonts())

# 設定字型及大小

font = pygame.font.sysfont(

"方正小標宋簡體",20

)# 分數

score =

0

顯示出文字

'''分數相關'''

# 連線文字

score_text =

'成績:'

+str

(score)

# 生成su***ce

score_su***ce = font.render(score_text,

true,(

0,0,

0))# 繪製出文字

screen.blit(score_su***ce,(10

,10))

在結束介面繪製文字

# 繪製分數

提公升遊戲難度有很多方法,在這裡就不一一贅述,這裡只作出示例,提取出若干引數,若提公升遊戲難度,只需將引數修改即可。另外多種玩法若有興趣,讀者可自行設定。

新增全域性變數

# 玩家射擊速度

shoot_speed =

40# 敵機增加速度

enemy_add_speed =

60

替換對應資料

if tick % shoot_speed ==

0:

if tick % enemy_add_speed ==

0:

飛機大戰小遊戲1 0

視窗類 飛機遊戲 author 小帆敲 public class mygameframe extends jframe catch interruptedexception e new framethread start 新增炮彈 for int i 0 i 計時器 author 小帆敲 publi...

飛機大戰的小遊戲

c語言 include include include include include define max 100 long long int speed 0 控制敵機的速度 int position x,position y 飛機的所在位置 int high,width 地圖的大小 int bu...

python飛機大戰小遊戲開發02

編寫設定類 在寫完遊戲的視窗 後,我們要將背景色改變,背景色是由pygame的screen.fill方法構成的,於是我們對run函式進行修改,增加了self.screen.fill 230,230,230 將螢幕變成灰色 def run game self while true for event ...