1. 程式人生 > >python新手敲打飛機大作戰專案(上)

python新手敲打飛機大作戰專案(上)

程式碼已經標註前後順序,感覺還算比較詳細,

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()