说实话,第一次看到PyBoy这个项目的时候,我愣了一下——用Python写的Game Boy模拟器?这玩意儿能跑得动?
结果不但能跑,还能跑到几百倍速,甚至能让AI自己学打《宝可梦红》,把世界纪录给破了。对,你没看错,就是那个小时候躲在被窝里玩的砖头掌机,现在可以用Python代码来操控了。

这玩意儿到底能干啥?
PyBoy就是一个用Python写的Game Boy模拟器,支持GB和GBC的游戏ROM。但你千万别把它当成普通的模拟器——它的核心卖点不是让你用手柄玩,而是让你用代码玩。
打个比方,普通模拟器是给你个游戏机,PyBoy是给你个游戏机的编程接口。你可以写脚本自动按按钮、读内存、截屏,甚至训练一个强化学习模型来自己学通关。
安装也贼简单,一行命令搞定:
pip install pyboy
装完之后,要么直接在终端里跑游戏:
pyboy 你的游戏.gb
要么在Python脚本里调用:
from pyboy import PyBoy
pyboy = PyBoy('你的游戏.gb')
while pyboy.tick():
pass
pyboy.stop()
让AI学会打游戏,其实没那么玄乎
我跟你讲,这个项目的真正牛逼之处在于它的API设计。你想让AI控制游戏?直接调函数就行:
pyboy.set_emulation_speed(0) # 不限速,跑多快都行
pyboy.button('down')
pyboy.button('a')
pyboy.tick() # 走一帧,让游戏反应过来
还可以直接读内存——比如《宝可梦》里角色位置存在0xC345这个地址,你一行代码就能拿到:
位置 = pyboy.memory[0xC345]
甚至可以截图保存,给AI当观察输入:
图片 = pyboy.screen.image
图片.save('当前画面.png')
说白了,这就把游戏变成了一个标准的强化学习环境。你给AI看画面,AI输出按键,跟训练AlphaGo没啥本质区别。
性能?偷偷告诉你个作弊技巧
Game Boy原生跑60帧每秒,PyBoy在不渲染画面的情况下能飙到395倍实时速度——也就是说,1小时能模拟395小时的游戏时间。
下面这张表给你直观感受:
| 渲染方式 |
速度倍数 |
1小时能模拟多久 |
| 每帧渲染 |
124倍 |
124小时 |
| 跳15帧渲染 |
344倍 |
344小时 |
| 完全不渲染 |
395倍 |
395小时 |
要是你有个8核的机器,并行跑8个实例,那1小时直接干到3000多小时。训练AI的效率一下子就上来了。
能玩啥游戏?
基本上所有GB和GBC游戏都支持。官方给了几个例子:
- 《俄罗斯方块》——拿来写AI的入门级
- 《超级马里奥大陆》——需要点水平了
- 《星之卡比》——复杂一点的逻辑
- 《宝可梦红》——最经典的强化学习案例
有人已经用这个项目训练AI去打宝可梦速通了,效果还挺吓人。
想折腾一下代码?
这个项目在GitHub上有5.1k星,500多个分支,35个人在维护。如果你想自己改改:
- 想做汉化改版?可以直接hack游戏内存
- 想写AI?API都给你封装好了
- 想做联机?有人正在弄Link Cable功能
- 想做调试器?VSCode插件那种
任何水平都能掺和一脚,提个Issue或者Pull Request就行。
最后说点实在的
我觉得PyBoy最妙的地方在于,它把一个怀旧的东西和前沿的AI技术拧在了一起。你小时候玩过的那些游戏,现在可以用代码重新玩一遍——而且还是让AI替你玩。
这感觉就像……你以前的游戏卡带突然变成了一本编程教科书,挺奇妙的。
项目地址:https://github.com/Baekalfen/PyBoy