pygame中, 我们可以把游戏封装为一个对象, 然后设置游戏的方法, 例如
- init –> 初始化
- start –> 开始游戏
此小节, 将重构main.py代码, 把零散的代码封装为一个游戏对象
封装框架
新建PlaneGame类
新建一个类, PlaneGame, 继承于object, 这个类主要封装游戏对象
class PlaneGame(object):
"""飞机大战主程序"""
def __init__(self):
print("游戏初始化")
def start_game(self):
print("游戏开始")
def __create_sprites(self): # 创建精灵组
pass
def __event_handler(self): # 事件监听
pass
def __check_collide(self): # 碰撞检测
pass
def __update_sprites(self): # 更新显示
pass
@staticmethod
def __game_over(): # 游戏结束
pass
新建main方法
if __name__=="__main__":
# 创建游戏对象
game = PlaneGame()
# 开始游戏
game.start_game()
新建常量
在python中, 没有真正的常量, 这里的常量是一种约定, 变量名用全大写表示, 即表示为常量
SCREEN_RECT = pg.Rect(0, 0, 480, 700) # 窗体属性
FRAME_PER_SEC = 60 # 刷新帧率
编写init方法
print("游戏初始化")
pg.init()
# 1.创建游戏窗口
self.screen = pg.display.set_mode(SCREEN_RECT.size)
# 2. 创建游戏时钟
self.clock = pg.time.Clock()
# 3.调用私有方法, 精灵和精灵组的创建
self.__create_sprites()
编写start方法
def start_game(self):
print("游戏开始")
while True:
# 1. 设置刷新帧率
self.clock.tick(FRAME_PER_SEC)
# 2. 事件监听
self.__event_handler()
# 3. 碰撞检测
self.__check_collide()
# 4. 更新/绘制精灵组
self.__update_sprites()
# 5. 更新显示
pg.display.update()
编写事件侦听
for event in pg.event.get():
# 判断是否退出游戏
if event.type == pg.QUIT:
PlaneGame.__game_over()
代码小结
本节后, main.py代码如下
import pygame as pg # 导入pygame模块
from plane_sprites import GameSprite
SCREEN_RECT = pg.Rect(0, 0, 480, 700) # 窗体属性
FRAME_PER_SEC = 60 # 刷新帧率
class PlaneGame(object):
"""飞机大战主程序"""
def __init__(self):
print("游戏初始化")
pg.init()
# 1.创建游戏窗口
self.screen = pg.display.set_mode(SCREEN_RECT.size)
# 2. 创建游戏时钟
self.clock = pg.time.Clock()
# 3.调用私有方法, 精灵和精灵组的创建
self.__create_sprites()
def start_game(self):
print("游戏开始")
while True:
# 1. 设置刷新帧率
self.clock.tick(FRAME_PER_SEC)
# 2. 事件监听
self.__event_handler()
# 3. 碰撞检测
self.__check_collide()
# 4. 更新/绘制精灵组
self.__update_sprites()
# 5. 更新显示
pg.display.update()
def __create_sprites(self): # 创建精灵组
pass
def __event_handler(self): # 事件监听
for event in pg.event.get():
# 判断是否退出游戏
if event.type == pg.QUIT:
PlaneGame.__game_over()
def __check_collide(self): # 碰撞检测
pass
def __update_sprites(self): # 更新显示
pass
@staticmethod
def __game_over(): # 游戏结束
print("游戏结束")
pg.quit()
exit()
if __name__=="__main__":
# 创建游戏对象
game = PlaneGame()
# 开始游戏
game.start_game()