今天是寒假在家学习的第一天,也是第一次接触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