pygame模块练习

这篇博客通过Python的pygame库创建了一个游戏基础框架,包括角色类Character和子弹类Bullet的抽象定义,以及具体的角色实例CharacterSprite和子弹实例BulletSprite。文章展示了如何控制角色移动、显示以及初始化窗口和背景图片,并进入了游戏主循环处理用户输入和事件。
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()
        # 刷新一下画面

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值