pygame的学习之路-1

今天是寒假在家学习的第一天,也是第一次接触pygame

主要了解了 精灵 和 精灵组 这两个概念 以及其的初步使用

学习到了对于pygame开发游戏的通用框架如下:

import pygame
from game_hub import *
from game_music import *
from game_items import *

class Game(object):
    """游戏核心类"""

    def __init__(self):
        # 游戏窗口
        self.main_window = pygame.display.set_mode(SCREEN_RECT.size)

        # 游戏状态
        self.is_game_over = False
        self.is_game_pause = False
        
        # 游戏精灵
        # 音乐播放器
        # 游戏精灵组


    def reset_game(self):
        """重置游戏数据"""
        self.is_game_over = False
        self.is_game_pause = False

    def start(self):
        """开始游戏主逻辑"""
        # 创建时钟
        clock = pygame.time.Clock()
        while True:
            # 处理事件监听
            if self.event_handler():
                # event_handler 返回 True 则说明发生了退出事件
                return

            # 根据游戏状态 切换界面显示的内容
            if self.is_game_over:
                print("游戏已经结束,请按空格键重新开始.....")
            elif self.is_game_pause:
                print("游戏已经暂停,请按空格键继续.....")
            else:
                print("游戏进行中")

            # 刷新界面
            pygame.display.update()
            # 设置刷新率
            clock.tick(60)

    def event_handler(self):
        """获取并处理事件"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                # 退出按钮被点击
                return True
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
                # 用户按下键盘 esc
                return True
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                # 用户按下 空格 键
                if self.is_game_over == True:
                    # 如果已经结束 重置游戏
                    self.reset_game()
                else:
                    # 游戏还没结束 切换暂停状态
                    self.is_game_pause = not self.is_game_pause

        return False

if __name__ == '__main__':
    # 初始化游戏
    pygame.init()

    # 开始游戏
    Game().start()

    # 释放游戏
    pygame.quit()

也在学习pygame应用精灵和精灵组的同时学习到了 不借用精灵和精灵组来加载图片

例如:

def creat_image(self):
    
    # 加载背景
    self.background_image = pygame.image.load('./res/images/background.png')
    self.background_rect = self.background_image.get_rect() # 获取背景矩形
    
    # 加载飞机
    self.hero_image = pygame.image.load('./res/images/me1.png')
    self.hero_rect = self.hero_image.get_rect() # 获取飞机矩形
    
    # 把飞机和背景中心对齐
    self.hero_rect.center = self.background_rect.center

pygame中绘制内容

self.main_window.blit(self.background_image, self.background_rect)
self.main_window.blit(self.hero_image, self.hero_rect)

今天代码进展如下:

main.py

"""游戏核心文件"""
import pygame
from game_hub import *
from game_music import *
from game_items import *

class Game(object):
    """游戏核心类"""

    def __init__(self):
        # 游戏窗口
        self.main_window = pygame.display.set_mode(SCREEN_RECT.size)

        # 游戏状态
        self.is_game_over = False
        self.is_game_pause = False
        # 游戏精灵组
        self.all_group = pygame.sprite.Group()  # 存放所有精灵组
        self.enemies_group = pygame.sprite.Group()  # 敌机精灵组
        self.supplies_group = pygame.sprite.Group()  # 道具精灵组

        # 游戏精灵
        GameSprite('background.png', 1, self.all_group )
        # 音乐播放器



    def reset_game(self):
        """重置游戏数据"""
        self.is_game_over = False
        self.is_game_pause = False

    def start(self):
        """开始游戏主逻辑"""
        # 创建时钟
        clock = pygame.time.Clock()
        while True:
            # 处理事件监听
            if self.event_handler():
                # event_handler 返回 True 则说明发生了退出事件
                return

            # 根据游戏状态 切换界面显示的内容
            if self.is_game_over:
                print("游戏已经结束,请按空格键重新开始.....")
            elif self.is_game_pause:
                print("游戏已经暂停,请按空格键继续.....")
            else:
                print("游戏进行中")

            # 刷新界面
            pygame.display.update()
            # 设置刷新率
            clock.tick(60)

    def event_handler(self):
        """获取并处理事件"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                # 退出按钮被点击
                return True
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
                # 用户按下键盘 esc
                return True
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                # 用户按下 空格 键
                if self.is_game_over == True:
                    # 如果已经结束 重置游戏
                    self.reset_game()
                else:
                    # 游戏还没结束 切换暂停状态
                    self.is_game_pause = not self.is_game_pause

        return False

if __name__ == '__main__':
    # 初始化游戏
    pygame.init()

    # 开始游戏
    Game().start()

    # 释放游戏
    pygame.quit()

game_items.py

"""游戏元素模块"""
import pygame


# 定义全局变量
SCREEN_RECT = pygame.Rect(0, 0, 480, 700)  # 游戏窗口矩形

class GameSprite(pygame.sprite.Sprite):

    res_path = './res/images/'

    def __init__(self,image_name,speed,*group):
        """初始化精灵对象"""
        # 调用父类方法,把当前精灵对象放到精灵组里
        super(GameSprite,self).__init__(*group)

        # 创建图片
        self.image = pygame.image.load(self.res_path + image_name)

        # 获取矩形
        self.rect = self.image.get_rect()

        # 设置移动速度
        self.speed = speed


    def update(self,*args):
        """更新元素数据"""
        self.rect.y += self.speed

2022-1-5

Guess you like

Origin blog.csdn.net/qq_17173759/article/details/122333547