plane_sprites.py 文件代码:
import pygame
屏幕大小的常量
SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
class GameSprite(pygame.sprite.Sprite):
"""游戏主类——继承自 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):
# 在屏幕的垂直方向 x 向下挪动
self.rect.y += self.speed
class BackGround(GameSprite):
"""背景类,继承自 GameSprite"""
def __init__(self, is_alt=False):
# 调用父类办法创立精灵对象
super().__init__("./ 游戏素材 /background.png")
# 判断是否为背景图像 2,若是则扭转初始坐标地位
if is_alt:
self.rect.y = -SCREEN_RECT.height
def update(self):
# 调用父类办法——向下挪动
super().update()
if self.rect.y >= SCREEN_RECT.height:
self.rect.y = -SCREEN_RECT.height
plane_main.py 文件代码:
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()
# 调用公有办法跟单网 http://www.gendan5.com/,创立精灵和精灵组
self.__create_sprites()
def __create_sprites(self):
# 创立背景精灵
background1 = BackGround()
background2 = BackGround(is_alt=True)
# 创立背景精灵组
self.background_group = pygame.sprite.Group(background1, background2)
def start_game(self):
"""启动游戏"""
# 游戏主循环
while True:
# 设置刷新帧率为 60
self.clock.tick(120)
# 事件监听
self.__event_handler()
# 碰撞检测
self.__check_collide()
# 地位更新
self.__update_sprites()
# 游戏主窗口刷新显示
pygame.display.update()
def __check_collide(self):
"""碰撞检测"""
pass
def __event_handler(self):
"""事件监听"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
PlaneGame.__game_over()
def __update_sprites(self):
"""地位更新"""
self.background_group.update()
self.background_group.draw(self.screen)
@staticmethod
def __game_over():
# 完结游戏
print("游戏完结...")
pygame.quit()
exit()
if name == ‘__main__’:
# 初始化 pygame
pygame.init()
# 创立游戏对象
game = PlaneGame()
# 启动游戏
game.start_game()