@[TOC](AircraftWar(pygame)- python學習)
設計說明:
- 完成敵機發射子彈功能(注意:子彈不是連發、移動速度不要太快)
- 實現敵機子彈和玩家飛機的碰撞檢測實現敵機子彈和玩家飛機的碰撞檢測
- 爲消失的飛機添加爆炸效果爲消失的飛機添加爆炸效果
項目特點及完成功能:
- 增加 Settings 類用於保存遊戲參數,方便後續擴展
- 增加 Bullet 基類和 Plane 基類,增加代碼複用
- 實現英雄機的上下左右移動和子彈發射
- 實現敵機的隨機出現和敵機子彈的隨機發射
- 實現敵機與英雄機的碰撞檢測、子彈與飛機的碰撞檢測
- 實現飛機被擊中後的爆炸效果(通過 list 實現)
- 實現遊戲結束後背景畫面仍在滾動的效果
- 增加背景音樂
遊戲界面
部分代碼
# 全局的設置類
class Settings():
def __init__(self):
# 定義遊戲窗口大小,爲背景圖片的一半
self.screen_size = (self.screen_width, self.screen_height) = (512, 768)
self.bg_color = (230, 230, 230)
self.bg_image = './images/bg2.jpg'
# 不能播放 mp3,所以轉成 wav
self.bg_music = './music/01.wav'
self.gameover_image = './images/gameover.jpg'
self.title = '飛機大戰'
# 英雄機參數
self.move_step = 5 # 鍵盤控制的速度
self.hero_style = './images/me.png'
# 敵機參數
self.enemy_speed = 4 # 敵機飛行速度
self.enemy_style_list = ['./images/e0.png', './images/e1.png', './images/e2.png']
# 子彈參數
self.bullet_style = './images/pd.png'
self.bullet_hero_v = 10 # 英雄機子彈速度
self.bullet_enemy_v = 8 # 敵機子彈速度
# 子彈基類
class Bullet:
def __init__(self, screen, x, y):
self.x = x
self.y = y
self.screen = screen
self.image = pygame.image.load(settings.bullet_style)
def __del__(self):
pass
def display(self):
self.screen.blit(self.image, (self.x, self.y))
def move(self):
return True
# 飛機基類
class Plane:
def __init__(self, screen, style, geo):
self.screen = screen
self.image = pygame.image.load(style)
self.bullet_list = []
self.x = geo[0]
self.y = geo[1]
self.is_dead = False
self.finished = False
self.bomb_seq = ['4','4','3','3','2','2','1','1']
def __del__(self):
pass
def display(self):
for b in self.bullet_list:
b.display()
# 回收子彈
if b.move(): self.bullet_list.remove(b)
# 爆炸效果
if self.is_dead:
death_x = self.x
death_y = self.y
death_w = self.image.get_width()
death_h = self.image.get_height()
try:
bomb_image = './images/bomb'+self.bomb_seq.pop()+'.png'
self.image = pygame.image.load(bomb_image)
except:
self.image = pygame.image.load('./images/bomb4.png')
self.finished = True
finally:
x = death_x + (death_w - self.image.get_width())/2
y = death_y + (death_h - self.image.get_height())/2
self.screen.blit(self.image, (x, y))
else:
# 重新繪製飛機
self.screen.blit(self.image, (self.x, self.y))
def fire(self):
self.bullet_list.append(Bullet(self.screen, self.x, self.y))
print(len(self.bullet_list))
def over(self):
#print("Oops: plane over ...")
#del self
return self.finished
後記
這部分內容興趣不大,對遊戲有興趣的可以深入瞭解。這個程序我只是大致讀懂,全代碼和具體思路詳見參考博主