一个为36x28 RGB点阵屏设计的超级马里奥风格游戏,支持PS5手柄控制和实时串口数据传输。
- 适配低分辨率:专门为36x28像素点阵屏优化的游戏画面
- PS5手柄控制:完整支持PS5 DualSense手柄输入
- 实时串口传输:将游戏画面实时传输到物理点阵屏硬件
- 图形化界面:PyQt5界面,可实时预览游戏画面和调试
- 模块化设计:清晰的代码结构,易于扩展和维护
- Python 3.7+
- Linux/Windows/macOS
- PS5手柄(通过USB或蓝牙连接)
- 串口设备(用于连接点阵屏硬件)
pip install -r requirements.txtpygame>=2.1.0- PS5手柄输入处理pyserial>=3.5- 串口通信PyQt5>=5.15.0- 图形用户界面numpy>=1.21.0- 数值计算和矩阵操作Pillow>=8.3.0- 图像处理(可选)
cd code
python main.py-
连接PS5手柄:
- USB连接:直接用USB线连接手柄到电脑
- 蓝牙连接:在系统蓝牙设置中配对手柄
-
连接串口设备:
- 在GUI界面中选择正确的串口号
- 设置合适的波特率(默认115200)
- 点击"连接"按钮
- 方向键/左摇杆:控制马里奥左右移动
- X键:跳跃
- □键:攻击/发射(如果有火花马里奥状态)
- 开始游戏:启动或继续游戏
- 暂停游戏:暂停当前游戏
- 重置游戏:重新开始游戏
- 发送测试图案:向点阵屏发送彩虹测试图案
code/
├── main.py # 主程序入口
├── config.py # 配置文件
├── controller_handler.py # PS5手柄控制处理
├── game_objects.py # 游戏对象(马里奥、敌人、道具等)
├── level.py # 游戏关卡管理
├── matrix_renderer.py # 点阵屏渲染器
├── serial_transmitter.py # 串口数据传输
├── gui_display.py # PyQt5图形界面
├── requirements.txt # 依赖列表
└── README.md # 项目说明
在 config.py 中可以调整以下参数:
MATRIX_WIDTH = 36- 点阵屏宽度MATRIX_HEIGHT = 28- 点阵屏高度GAME_FPS = 30- 游戏帧率
MARIO_SIZE = 2- 马里奥角色大小MARIO_SPEED = 1- 马里奥移动速度JUMP_STRENGTH = 3- 跳跃力度GRAVITY = 0.2- 重力加速度
SERIAL_PORT = '/dev/ttyUSB0'- 默认串口SERIAL_BAUDRATE = 115200- 波特率SERIAL_TIMEOUT = 1- 超时时间
发送到点阵屏的数据包格式:
帧头(2字节) + 数据长度(2字节) + RGB数据(3024字节) + 校验和(1字节) + 帧尾(1字节)
- 帧头:
0xAA 0x55 - 数据长度: 3024字节(36×28×3)
- RGB数据: 按行排列的RGB像素数据
- 校验和: XOR校验
- 帧尾:
0x0D
- 马里奥角色移动和跳跃
- 重力系统和碰撞检测
- 敌人AI和交互
- 金币收集系统
- 分数和生命系统
- 关卡地形(地面、平台、砖块)
- 无敌状态和闪烁效果
- 相机跟随系统
- 更多敌人类型
- 道具系统(蘑菇、火花等)
- 多关卡支持
- 背景音乐和音效
- 关卡编辑器
- 确认手柄已正确连接到系统
- 检查pygame是否正确安装
- 尝试重启应用程序
- 确认串口设备已连接
- 检查串口权限(Linux下可能需要sudo或添加用户到dialout组)
- 尝试不同的波特率设置
- 确认串口未被其他程序占用
- 降低游戏帧率(修改config.py中的GAME_FPS)
- 关闭不必要的后台程序
- 检查CPU使用率
- 在
game_objects.py中继承GameObject类 - 实现必要的方法(update, render等)
- 在
level.py中添加到关卡
- 编辑
matrix_renderer.py中的渲染逻辑 - 调整颜色定义(config.py中的COLOR_*常量)
- 添加新的视觉效果
- 修改
controller_handler.py中的按键映射 - 在
config.py中调整按键常量
本项目基于MIT许可证开源。
欢迎提交Issue和Pull Request来改进这个项目!
如有问题或建议,请通过GitHub Issues联系。