当前位置:首页>python>Python pyxel库做个小游戏,让飞机动起来

Python pyxel库做个小游戏,让飞机动起来

  • 2026-09-10 14:59:48
Python pyxel库做个小游戏,让飞机动起来
今天我们继续来看pyexl这个库,上次我们哦那个类封装类基础的Sprite和玩家的角色,今天我们就给小飞机加入速度属性和移动逻辑。
我们会封装一个move()函数,通过速度和角度来灵活控制移动方向
首先对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    # 宽度        self.h = h    # 高度        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    def move(self, spd, deg):        """ 新增:通过速度和角度控制移动方向        :param spd: 移动速度(数值越大越快)        :param deg: 移动角度(单位:度,0=右,90=下,180=左,270=上)        """        rad = deg * math.pi / 180  # 角度转弧度(数学计算需要)        self.vx = spd * math.cos(rad)  # X轴速度分量        self.vy = spd * math.sin(rad)  # Y轴速度分量
vx/vy 分别控制x、y方向的移动速度,整数=向右/向下,负数=向左/向上;move方法不需要手动计算vx/vy ,传入角度+速度就可以自动计算方向,比如220度对应左上方向;弧度的转换,math.cos()/math.sin()需要弧度值,所以要把角度转换成弧度
在test.py中新增角色的速度常量,方便统一调整
# main.py 顶部import pyxelimport mathimport randomimport spriteW, H = 160, 120SHIP_SPD = 1.4  # 玩家移动速度(常量,易维护)
接下来我们整理下完整的代码
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 move(self, spd, deg):        """ 控制移动方向和速度 """        rad = deg * math.pi / 180        self.vx = spd * math.cos(rad)        self.vy = spd * math.sin(rad)    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为黑色)        )
test.py
import pyxelimport mathimport randomfrom sprite import ShipSprite# 游戏窗口尺寸(宽160,高120)W, H = 160, 120  SHIP_SPD = 1.4 # 移动速度# 游戏核心类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)        self.ship.move(SHIP_SPD, 220)        # 启动游戏循环        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()
运行起来后我们可以看到,小飞机自动向左上方向移动,直到出了屏幕,基本的操作准备好了, 下次我们来通过键盘来控制它的移动。

最新文章

随机文章