如何用Python加载Procgen2游戏?CEnv动态库调用5步实战教程 【免费下载链接】Procgen2Fast and procedurally generated side-scroller-game-like graphical environments (formerly Procgen)项目地址https://gitcode.com/gh_mirrors/pr/Procgen2点击查看免费下载Procgen2前身 Procgen是一个提供高速程序化生成的横版卷轴图形环境的开源项目专为强化学习设计。它的核心亮点是 CEnv 接口游戏用 C/C 编写并编译成动态库.so/.dylib/.dll再由 Python 通过 cenv/cenv.py 直接加载调用——无需绑定代码、性能损失极小即可获得符合 Gymnasium 规范的reset()/step()/render()完整环境 API。本教程将带你从零完成「编译 → 加载 → 交互」全流程。1️⃣ 准备工作环境与依赖清单开始前请确认你的机器上已安装依赖用途安装提示CMake ≥ 3.13构建游戏动态库包管理器安装即可SDL3 SDL3_image游戏渲染Linux 通常可直接用系统包管理器找到Python 3 Gymnasium NumPy加载与交互pip install gymnasium numpy 为什么需要 SDL3Procgen2 各游戏如 coinrun依赖 SDL3 的软件渲染来生成观察画面这一点在开发指南 DEV_GUIDE.md 中有明确说明。拿到源码git clone https://gitcode.com/gh_mirrors/pr/Procgen2 cd Procgen22️⃣ 了解项目结构游戏在哪里仓库中所有游戏都放在games/目录下每个游戏是独立的 C 模块games/coinrun/ —— 官方推荐参考的完整示例cenv/USAGE_GUIDE.md 也指向它games/chaser/、games/jumper/、games/maze/ 等共 7 个游戏cenv/ —— Python 侧加载器 cenv/cenv.py 与接口头文件 cenv/cenv.h根目录的 CMakeLists.txt 已自动包含全部子游戏目录因此只需在仓库根目录构建一次即可得到所有游戏的动态库。3️⃣ 第一步用 CMake 编译出动态库在仓库根目录执行对应各游戏 CMakeLists.txt 中add_library(... SHARED ...)的目标mkdir build cd build cmake .. cmake --build .构建完成后你会在build/games/游戏名/下得到共享库例如build/games/coinrun/libCoinRun.sobuild/games/chaser/libChaser.sobuild/games/caveflyer/libCaveFlyer.so Windows 上产物为.dllmacOS 上为.dylib。文件名以实际构建输出为准Python 加载时填入对应路径即可。4️⃣ 第二步用 Python 加载 CEnv 动态库核心只需三行。CEnv类内部用ctypes.CDLL加载.so自动绑定cenv_make、cenv_reset、cenv_step、cenv_render、cenv_close五个函数并把观察空间/动作空间解析成标准 Gymnasium Space详见 cenv/cenv.pyfrom cenv.cenv import CEnv import numpy as np env CEnv(build/games/coinrun/libCoinRun.so) print(env.observation_space) # 观察空间定义 print(env.action_space) # 动作空间定义支持可选参数# render_mode: human / single_rgb_array # options: 传递给 C 端 cenv_make 的键值选项例如指定画面宽高 env CEnv(build/games/caveflyer/libCaveFlyer.so, options{width: 512, height: 512})5️⃣ 第三步reset / step / render 完整交互循环交互方式与任意 Gymnasium 环境完全一致。下面这个最小示例会随机行动并打印奖励完整可运行版本见 game_test.py它加载的是 chaser 并统计 FPSobs, info env.reset() for i in range(1000): action np.random.randint(0, 16) # 动作可为 int 或 np.array obs, reward, terminated, truncated, info env.step(action) if terminated: obs, info env.reset() print(Resetting...)想要实时观看画面调用env.render()拿到 RGB 数组即可用 pygame 显示。仓库自带的 interactive_viewer.py 是一个完整演示——加载 CaveFlyer用键盘 WASD 控制、E 攻击、R 重置import pygame, pygame.surfarray import numpy as np width, height 512, 512 screen pygame.display.set_mode((width, height)) obs, info env.reset() while True: obs, reward, term, trunc, info env.step(action) if term: obs, info env.reset() else: image env.render() # (height, width, 3) uint8 数组 surf pygame.surfarray.make_surface(np.swapaxes(image, 0, 1)) screen.blit(surf, (0, 0)) pygame.display.flip()另外观察本身也包含画面obs[screen]是 64×64×3 的图像观测训练时无需依赖render()。6️⃣ 常见问题排查❓ 报OSError: cannot open shared object动态库路径不对。CEnv第一个参数是.so的实际路径相对当前 Python 工作目录建议先用ls build/games/确认文件名。❓cmake ..提示找不到 SDL3先安装 SDL3 和 SDL3_image 开发包Linux 包管理器搜索SDL3、SDL3_image相关包再重新执行 CMake。❓ 加载时抛Non-zero error code!这是cenv_make返回了非 0 错误码通常是渲染模式或 options 参数不被该游戏支持检查render_mode与options键名如width/height。❓ 想用别的语言写环境CEnv 接口是纯 C 约定任何能产出共享库并遵守 C 调用约定的语言都可以。接口定义见 cenv/cenv.h最小 C 示例环境见 cenv/test_env.c 与 cenv/test_env.py。7️⃣ 小结与延伸阅读按「CMake 编译 → CEnv 加载动态库 → reset/step/render 循环」三步你就把 Procgen2 的游戏接入了自己的强化学习训练流程。关键资料一览CEnv 完整用法指南cenv/USAGE_GUIDE.mdPython 加载器实现cenv/cenv.py游戏开发规范ECS、渲染器、资源管理DEV_GUIDE.md完整游戏示例games/coinrun/coinrun.cpp性能测试脚本game_test.py交互式试玩脚本interactive_viewer.py祝你训练顺利跑通第一个算法赞分享【免费下载链接】Procgen2Fast and procedurally generated side-scroller-game-like graphical environments (formerly Procgen)项目地址https://gitcode.com/gh_mirrors/pr/Procgen2点击查看免费下载相关推荐如何用RPG Maker Decrypter一键提取游戏资源5步实战教程如何用RPG Maker Decrypter一键提取游戏资源5步实战教程 想要解锁RPG Maker游戏的加密资源吗RPG Maker Decrypter这开发工具桌面应用CLI游戏开发十分钟上手Sudachi 模拟器免费跑 Switch 游戏十分钟上手Sudachi 模拟器免费跑 Switch 游戏 Sudachi 模拟器是一款免费开源的 Nintendo Switch 模拟工具C 写成A5步搞定PS2游戏加载Open PS2 Loader完整使用教程5步搞定PS2游戏加载Open PS2 Loader完整使用教程 想要让尘封已久的PlayStation 2主机焕发新生Open PS2 LoaderOP上一篇如何为Scenario for Blender贡献代码开发环境、Blender原生测试与CI验证完整指南下一篇SuperPlane 内联配置助手AI Field Suggest无状态、单次调用的字段级 AI 建议设计创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考