(五)通過pygame搭建遊戲框架


python飛機大戰系列文章(按順序)
(一)通過pygame 將自己的圖像添加到遊戲中
(二)通過pygame讓遊戲人物 動起來
(三)通過pygame處理用戶的鼠標鍵盤操作(事件和監聽
(四)詳解pygame中的精靈和精靈組
(五)通過pygame搭建遊戲框架
(六)通過pygame讓遊戲背景圖像實現交替滾動
(七)通過pygame來設置飛機大戰中 敵機 的速度、位置等
(八)通過pygame來操控遊戲人物的移動
(九)通過pygame使遊戲人物發射子彈
(十)通過pygame來進行碰撞檢測



遊戲框架的搭建
要搭建一個遊戲的框架,首先要明確主程序的職責

明確主程序的職責

由之前的案例可以得知,一個遊戲的主程序的職責可以分成兩個部分

  1. 遊戲初始化
  2. 遊戲循環

在這裏插入圖片描述
現在我們根據明確的職責,設計PlaneGame類如下:

在這裏插入圖片描述在這裏插入圖片描述

明確文件職責

在這裏插入圖片描述

plane_main:
①封裝主遊戲類
②創建遊戲對象
③啓動遊戲

plane_sprites:
①封裝遊戲中所有需要使用的精靈子類
②提供遊戲的相關工具

【注意:開發中如果遇到固定數值的時候(比如本例的屏幕大小和每秒刷新幀率),最好不要直接使用固定數值,而是使用常量常量的命名規則爲所有的字母都使用大寫,單詞與單詞之間使用下劃線連接,如果需要調整值,只需要修改常量的定義就可以實現統一修改】

代碼

那麼現在大體可以得到一個簡單的框架(代碼還未完全)
其中,plane_sprites的內容爲:

import pygame

#屏幕大小的常量
SCREEN_RECT = pygame.Rect(0,0,480,700)
#刷新的幀率的常量
FRAME_PER_SEC = 60

class GameSprite(pygame.sprite.Sprite):
    """飛機大戰遊戲精靈"""
    def __init__(self, image_name, speed=1):

        #調用父類的初始化方法
        super().__init__()

        #定義對象屬性
        self.image = pygame.image.load(image_name)
        self.rect = self.image.get_rect()
        self.speed = speed

    def update(self):

        #在屏幕垂直方向上移動
        self.rect.y += self.speed

plane_main的內容爲:

import pygame
from plane_sprites import *


class PlaneGame(object):
    """飛機大戰主遊戲"""

    def __init__(self):
        print("遊戲初始化")

        #創建遊戲窗口
        self.screen = pygame.display.set_mode(SCREEN_RECT.size)
        #創建遊戲的時鐘
        self.clock = pygame.time.Clock()
        #調用私有方法,精靈和精靈組的創建
        self.__create_sprites()


    def __create_sprites(self):
        pass

    def start_game(self):
        print("遊戲開始")

        while True:
            #設置刷新幀率
            self.clock.tick(FRAME_PER_SEC)
            #事件監聽
            self.__event_handler()
            #碰撞檢測
            self.__check_collide()
            #更新/繪製精靈組
            self.__update_sprites()
            #更新顯示
            pygame.display.update()

    def __event_handler(self):

        for event in pygame.event.get():

            #判斷是否退出遊戲
            if event.type == pygame.QUIT:
                PlaneGame.__game_over()

    def __check_collide(self):
        pass

    def __update_sprites(self):
        pass

    #沒有使用對象屬性和類屬性,所以定義爲靜態方法
    @staticmethod
    def __game_over():
        print("遊戲結束")

        pygame.quit()
        exit()


if __name__ == '__main__':

    #創建遊戲對象
    game = PlaneGame()

    #啓動遊戲
    game.start_game()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章