当前位置:首页>python>Python pyxel库做个小游戏,用类创建游戏角色

Python pyxel库做个小游戏,用类创建游戏角色

  • 2026-09-02 20:30:08
Python pyxel库做个小游戏,用类创建游戏角色
在之前的内容中我们学习了适用pyxel搭建游戏的窗口和基本框架,今天我们来用python类封装游戏角色。
用过cocos2dx的伙伴应该知道Sprite这个概念,它就是把游戏出现的所有角色包括(玩家、敌人、道具)等,都被称作sprite,首先我们要准备sprite模块文件,在工作目录下创建sprite.py文件,定义通用基类BaseSprite
import pyxelimport mathimport randomclass BaseSprite:    def __init__(self, x, y, w=8, h=8):        """ 构造方法:初始化精灵基础属性 """        self.x = x    # X坐标        self.y = y    # Y坐标        self.w = w    # 精灵宽度(默认8像素)        self.h = h    # 精灵高度(默认8像素)        self.vx = 0   # X方向速度        self.vy = 0   # Y方向速度    def update(self):        """ 更新逻辑:根据速度移动精灵 """        self.x += self.vx  # X轴移动        self.y += self.vy  # Y轴移动    def draw(self):        """ 绘制逻辑:由子类实现(不同精灵绘制方式不同) """        pass
然后继承BaseSprite创建玩家角色ShipSprite,做个小飞机:
# 接上面sprite.py的代码class ShipSprite(BaseSprite):    def __init__(self, x, y):        """ 玩家飞船构造方法:调用父类初始化 """        super().__init__(x, y)  # 继承父类的属性    def draw(self):        """ 绘制玩家飞船:使用pyxel.blt绘制精灵图 """        pyxel.blt(            self.x, self.y, 0,    # 绘制坐标 + 图片编号(0为默认)            0, 0,                 # 图片内的起始坐标            self.w, self.h+2, 0     # 绘制尺寸 + 透明色(0为黑色)        )
在主函数中的Game类的构造方法中,创建我们的飞机
# Game类__init__方法内self.ship = sprite.ShipSprite(W / 2, H - 40)
并在Game类的update()方法中,调用玩家的更新逻辑,同时在Game类的draw方法中绘制飞机
# Game类update方法内self.ship.update()  # 目前仅复用父类的移动逻辑,暂未实现按键控制
# Game类draw方法内self.ship.draw()
我们基于之前的代码进行修改,首先是完整的sprite.py
import pyxelimport mathimport randomclass BaseSprite:    def __init__(self, x, y, w=8, h=8):        """ 构造方法:初始化精灵基础属性 """        self.x = x    # X坐标        self.y = y    # Y坐标        self.w = w    # 精灵宽度(默认8像素)        self.h = h    # 精灵高度(默认8像素)        self.vx = 0   # X方向速度        self.vy = 0   # Y方向速度    def update(self):        """ 更新逻辑:根据速度移动精灵 """        self.x += self.vx  # X轴移动        self.y += self.vy  # Y轴移动    def draw(self):        """ 绘制逻辑: """        pass# 小飞机class ShipSprite(BaseSprite):    def __init__(self, x, y):        """ 小飞机造方法:调用父类初始化 """        super().__init__(x, y)  # 继承父类的属性    def draw(self):        """ 绘制小飞机:使用pyxel.blt绘制精灵图 """        pyxel.blt(            self.x, self.y, 0,    # 绘制坐标 + 图片编号(0为默认)            0, 0,                 # 图片内的起始坐标            self.w, self.h+2, 0     # 绘制尺寸 + 透明色(0为黑色)        )
完整的test4.py,我们之前的文件叫这个名字
import pyxelimport mathimport randomfrom sprite import ShipSprite# 游戏窗口尺寸(宽160,高120)W, H = 160, 120  # 游戏核心类class Game:    def __init__(self):        """构造函数:初始化游戏"""        # 初始化分数(新增)        self.score = 0        # 初始化Pyxel窗口        pyxel.init(W, H, title="Test, Game!!")        # 加载资源文件(可选,本文重点是文字,也可注释掉)        pyxel.load("rc.pyxres")        self.ship = ShipSprite(W/2,H-40)        # 启动游戏循环        pyxel.run(self.update, self.draw)    def update(self):        """更新逻辑:每帧更新分数"""        # 每帧分数+1(模拟游戏得分,可根据实际逻辑修改)        self.score += 1        self.ship.update()    def draw(self):        """绘制逻辑:显示分数"""        # 清空屏幕,背景为黑色        pyxel.cls(0)        # 绘制格式化的分数(核心代码)        pyxel.text(            10, 10,                # 文字位置:屏幕左上角(10,10)            "SCORE:{:04}".format(self.score),  # 格式化分数为4位补零            12                     # 文字颜色:亮红色(12是Pyxel的颜色码)        )        self.ship.draw()# 程序入口def main():    Game()if __name__ == "__main__":    main()
执行一下看看效果
至此,我们就完成了基本角色的绘制,下次我们尝试让它动起来看看。

最新文章

随机文章