python新手敲打飛機大作戰專案(上)
阿新 • • 發佈:2018-12-20
程式碼已經標註前後順序,感覺還算比較詳細,
res/引入的圖片素材,大家可以自行百度或對接自己的素材,希望對大家有所幫助!
import pygame import sys import pygame.locals IMG_BACKGROUND="res/img_bg_level_2.jpg" APP_ICO="res/app.ico" # TODO 12 建立所有顯示的圖形父類 Model class Model: # TODO 16定義主題框物件,用於模型訪問使用 window = None # TODO 10.製作背景構造方法 , 傳入圖片路徑 x,y def __init__(self, img_path, x, y): self.img = pygame.image.load(img_path) # 背景圖片,傳入圖片路徑 self.x = x self.y = y # TODO 13 將模型加入窗體的方法抽取到父類 def display(self): # TODO 17使用Mode的類變數訪問窗體物件 呼叫bilt 方法,將圖片加入到窗體中 Model.window.blit(self.img,(self.x,self.y)) # TODO 背景 class Bcakground(Model): #TODO 16.定義背景移動方法 def move(self): self.y +=1 #縱座標自增1,展示出來圖片不斷變化 # TODO 21.加入背景移動的情況判定 if self.y <= Game.WINDOW_HEIGHT: # TODO .如果沒有超出螢幕就正常移動 self.y += 1 else: self.y=0 #縱座標=0 恢復原位 #TODO 22覆蓋父類display方法 製作原始背景貼圖+輔助背景圖 def display(self): # TODO .原始背景貼圖,推薦使用super().display() Model.window.blit(self.img,(self.x,self.y)) # TODO 輔助背景,座標位置與原始背景貼圖上下拼接吻合 Model.window.blit(self.img,(self.x,self.y-Game.WINDOW_HEIGHT)) # TODO 玩家 class PlayerPlane(Model): pass #TODO 敵方 class EnemyPlane(Model): pass # TODO 子彈 class Bullet(Model): pass # TODO 遊戲 class Game: WINDOW_HEIGHT = 768 WINDOW_WIDTH = 512 # TODO 1.主程式 運行遊戲入口 def構造方法 def run(self): self.frame_init() #TODO 4.執行窗體初始化 self.model_init()# TODO 12.背景圖執行物件初始化 while True: # TODO 使用反覆執行的機制, 重新整理窗體 #TODO 19 呼叫背景移動操作,構造背景圖片下拉移動的效果 self.background.move() #TODO 20 移動完畢後將移動後的圖片加入到窗體中 self.background.display() # TODO 6.重新整理窗體 pygame.display.update() self.event_init()#TODO 8.初始化關閉視窗-監聽事件並反覆呼叫監聽 # TODO 3.初始化 窗體 def frame_init(self): # TODO 5.初始化窗體 self.windows=pygame.display.set_mode((Game.WINDOW_WIDTH,Game.WINDOW_HEIGHT)) Model.window = self.windows #TODO 15將窗體物件傳入模型類中 # TODO 7.設定遊戲相關屬性 img=pygame.image.load(APP_ICO) pygame.display.set_icon(img) pygame.display.set_caption("飛機大作戰無敵版 -By.ictcast") def event_init(self): # TODO 9.獲取當前頁面所有發生的事件 for event in pygame.event.get(): # 判斷當前事件類別是不是點選窗體的關閉按鈕 if event.type == pygame.locals.QUIT: # 執行退出系統操作 sys.exit() # TODO 11.初始化窗體中的物件 def model_init(self): # 初始化背景物件,傳入圖片路徑,放置在0,0(x.y)位置 self.background=Bcakground(IMG_BACKGROUND,0,0) #TODO 18.使用self 提成為類方法呼叫 # TODO 14 使用抽取的Model類中的display方法完成 18操作之後失效 # background.display() # 呼叫bilt方法,將圖片加入到視窗體 # self.windows.blit(background.img,(background.x,background.y)) #TODO 2.程式測試類 入口操作 if __name__ == '__main__': Game().run()