二、新增**動畫
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 ...