background_image_filename = '素材\\1.jpg'
fly_img_name = '素材\\fugu.png'
from abc import ABCMeta, abstractmethod
import pygame
# 导入pygame库
from pygame.locals import *
# 导入一些常用的函数和常量
from sys import exit
import time
# 向sys模块借一个exit函数用来退出程序
pygame.init()
# 初始化pygame,为使用硬件做准备
class Character:
__metaclass__ = ABCMeta
@abstractmethod
def move_ctrl(self, event):
""" 自机操作
示例
if event[K_DOWN]:
self.y -= 5
注意边界条件,此处暂不举例
"""
pass
@abstractmethod
def show(self, screen):
# 自机显示方法
pass
@abstractmethod
def mask(self):
# 遮罩图像
pass
@abstractmethod
def bullet(self, b):
assert issubclass(b, Bullet), "参数必须是Bullet的子类!"
class CharacterSprite(Character, pygame.sprite.Sprite):
def __init__(self, img_name):
pygame.sprite.Sprite.__init__(self)
self.x, self.y = 0, 0
self.img = img_name
self.cursor = pygame.image.load(self.img).convert_alpha()
def move_ctrl(self, keys_dict):
""" 自机操作
示例
if event[K_DOWN]:
self.y -= 5
注意边界条件,此处暂不举例
"""
if keys_dict[K_DOWN]:
self.y += 1
if keys_dict[K_UP]:
self.y -= 1
if keys_dict[K_LEFT]:
self.x -= 1
if keys_dict[K_RIGHT]:
self.x += 1
def show(self, screen):
# 自机显示方法
screen.blit(self.cursor, (self.x, self.y))
def mask(self):
# 遮罩图像
pass
def bullet(self, bullet_cls):
# 对每一颗子弹创建一个实例
# bullet_cls(self.x, self.y)
pass
class Bullet:
"""
接口
"""
__metaclass__ = ABCMeta
@abstractmethod
def move(self):
# 子弹移动行为
pass
@abstractmethod
def style(self):
# 子弹样式
pass
@abstractmethod
def show(self):
# 显示方法
pass
@abstractmethod
def mask(self):
# 遮罩图像
pass
class BulletSprite(Bullet, pygame.sprite.Sprite):
# 子弹
def __init__(self, fly_x: int, fly_y: int):
pygame.sprite.Sprite.__init__(self)
# 初始化时的飞机坐标
self.coordinate = (fly_x, fly_y)
# 子弹初始坐标
self.x, self.y = self.coordinate
def move(self):
pass
def style(self):
# 子弹样式
pass
def show(self):
# 显示方法
pass
def mask(self):
# 遮罩图像
pass
if __name__ == '__main__':
screen = pygame.display.set_mode((720, 640), FULLSCREEN|NOFRAME, 32)
# 创建了一个窗口
pygame.display.set_caption("Hello, World!")
# 设置窗口标题
background = pygame.image.load(background_image_filename).convert()
character = CharacterSprite(fly_img_name)
while True:
# 游戏主循环
time.sleep(0.004)
for event in pygame.event.get():
if event.type == QUIT:
# 接收到退出事件后退出程序
exit()
keys = pygame.key.get_pressed()
if keys[K_ESCAPE]:
exit()
character.move_ctrl(keys)
screen.blit(background, (0, 0))
# 将背景图画上去
character.show(screen)
pygame.display.update()
# 刷新一下画面