6.pygame-搭建主程序
阅读原文时间:2023年07月09日阅读:2

职责明确

新建plane_main.py

新建plane_sprites.py

#plane_sprites.py
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):  
    super().\_\_init\_\_()  # 使用super调用父类的初始化方法

    self.image = pygame.image.load(image\_name)  # 加载图片数据  
    self.rect = self.image.get\_rect()  # 获取图片对象  
    self.speed = speed  # 定义移动速度

def update(self):  
    # 在屏幕的垂直方向向上移动  
    # 位置的y += 移动速度,每次移动1  
    self.rect.y += self.speed

import pygame
from plane_sprites import *

"""飞机大战主程序"""

class PlaneGame(object):

    # 完成游戏的初始化动作
    def __init__(self):
        print('--游戏初始化--')
        # 创建游戏窗口 SCREEN_RECT是plane_sprites定义的常量,设定了窗口的大小,通过size获取窗口大小
        self.screen = pygame.display.set_mode(SCREEN_RECT.size)
        # 创建游戏时钟
        self.clock = pygame.time.Clock()
        # 调用私有方法 创建精灵和精灵组
        self.__create_sprites()

    # 私有方法-创建精灵、精灵组
    def __create_sprites(self):
        pass

    # 私有方法-更新精灵组
    def __update_sprites(self):
        pass

    # 私有方法-事件监听
    def __event_handler(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:  # 判断是否退出游戏
                self.__game_over()

    # 私有方法-碰撞监测
    def __check_collide(self):
        pass

    @staticmethod  # 私有方法-结束游戏
    def __game_over():
        print('--游戏结束--')
        pygame.quit()
        exit()

    # 游戏循环
    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()

if __name__ == '__main__':
    # 创建游戏对象
    game = PlaneGame()

    # 启动游戏
    game.start_game()