游戏与应用
Breakout 在本仓库运行;其他项目属于独立仓库或 npm 包,请使用各节指定的工作目录。所有项目均需要图形会话并满足原生构建要求。它们的依赖版本与 sfml.js 的发布独立。
Süper Mario Kart
安装与运行
Node.js 20.5+ · 带音频输出的图形桌面 · 原生构建要求
在存放项目的目录中克隆仓库,再进入游戏目录运行:
git clone https://github.com/XadillaX/super-mario-kart-sfml.js.git
cd super-mario-kart-sfml.js
npm install
npm startnpm start 编译到 dist/ 后启动游戏。Python 赛道制作工具为可选项,游玩不需要安装。
按键速查
- X
- 加速
- Z
- 刹车
- C
- 跳跃/漂移
- Left Right
- 转向
- Up Down
- 向前/向后使用道具
- Enter
- 确认/跳过赛道预览
- Esc
- 暂停
继续比赛:暂停菜单选 No,按 Enter;选 Yes 则放弃比赛。
Controls 和 Settings 菜单可调整按键、音量与分辨率。
赛道、项目来源与许可
super-mario-kart-sfml.js 使用 TypeScript + sfml.js 移植 vmbatlle/super-mario-kart。原版使用 C++ 和 SFML 2.5.1 编写;移植版的 54 个 TypeScript 模块沿用上游源码目录结构,保留 Mode 7 渲染、玩法、AI 与素材。
依赖固定为 sfml.js@1.0.0-rc.2 和 typescript@7.0.2。
五条赛道分别为 Donut Plains 1、Mario Circuit 2、Ghost Valley 1、Bowser Castle 1 和 Rainbow Road。代码采用 GPL v3;角色、图像与音乐归 Nintendo 所有。这是非官方的教育用途同人项目。
play-nes
安装与运行
推荐 Node.js 22 · Python 与 C++20 编译器 · 带音频输出的图形桌面
安装已发布的播放器,启动内置游戏:
npm install -g play-nes
nes croom打开有权使用的本地 ROM:
nes "/path/to/your game.nes"按键速查
玩家一
- 方向
- W A S D
- A/B
- J K
- Select
- 右 Shift
- Start
- Enter
玩家二
- 方向
- Left Right Up Down
- A/B
- 小键盘 5 小键盘 6
- Select
- 小键盘 8
- Start
- 小键盘 9
Esc 或关闭窗口退出;失去焦点时释放按住的按键。
显示与速度选项
--scale 3 调整窗口缩放,--frameRate 60 使用正常速度。帧率也会改变模拟速度,不仅改变显示速度。完整选项见 nes --help。
玩一局打砖块
在 sfml.js 仓库根目录先执行一次 npm ci,再运行 node examples/breakout.cjs。修改源码后执行 npm run build。

breakout.cjs 包含砖块碰撞、三条生命、计分与胜负状态。方向键左/右或 A/D 移动挡板,Space 发球或重新开始,P 暂停,Esc 退出。交互模式下失去焦点会暂停。
npm run demo:breakout 构建并启动游戏。macOS/Linux 可用以下命令复现游戏截图:
SFML_DEMO_SNAPSHOT=/tmp/sfml-breakout.png \
node examples/breakout.cjs --autoplay --frames=1500截图保存最后一帧的真实原生画面。--autoplay 自动控制挡板,--frames 限制运行帧数。node examples/breakout.cjs --self-test 无需打开窗口即可检查游戏逻辑。
node-sfml-demos
node-sfml-demos 包含使用 sfml.js 实现的 Bomberman、Breakout、Tetris、Doodle Jump 和 Arkanoid。
在存放项目的目录中克隆这个独立仓库,再进入各游戏目录安装依赖并启动。以 Bomberman 为例:
git clone https://github.com/XadillaX/node-sfml-demos.git
cd node-sfml-demos/bomberman
npm install
node index.js游戏目录、操作方式与上游 C++ 源码见 仓库 README。安装同样需要满足 原生构建要求。
使用 Node.js 22、Python 3 与 C++20 工具链。在各游戏目录内执行 npm install,再运行 node index.js。部分游戏共享字体和纹理,请保留完整仓库。各游戏固定依赖 sfml.js@1.0.0-rc.2,本页不会升级它们。所有游戏均支持关闭窗口,Bomberman 还会使用音频。Tetris、Doodle Jump 和 Arkanoid 保留原型中尚未完善的游戏逻辑。


星空背景中的打砖块。
操作 · A/D 或左/右移动并发球,Space 也可发球。失败后松开 Space 重置。Esc 退出。
在此目录运行:node-sfml-demos/breakout/
npm installnode index.js


在绿色平台之间跳跃。
操作 · 左/右移动,自动跳跃。
在此目录运行:node-sfml-demos/doodle_jump/
npm installnode index.js

16 个 ClojureScript 游戏
16-sfml.js-games-ported Fork 自 jsyqrt/games。原版 16 个游戏就是使用 C++ 和 SFML 编写的;这个 Fork 将它们全部迁移为 ClojureScript + sfml.js,保留原目录结构、素材、游戏逻辑和操作方式。
游戏通过 nbb 在 Node.js 上运行,无需 JVM 或单独编译。在存放项目的目录中克隆游戏仓库,再从仓库根目录启动:
git clone https://github.com/XadillaX/16-sfml.js-games-ported.git
cd 16-sfml.js-games-ported
npm ci
npx nbb "01 Tetris/main.cljs"需要 Node.js 20.5+、满足 原生构建要求 的环境,以及支持 OpenGL 窗口的图形会话。依赖固定为 sfml.js@1.0.0-rc.2 和 nbb@1.6.214。各脚本按自身目录定位资源。














可拖动棋子的棋盘与外部 Stockfish 引擎
操作 · 拖动棋子,Space 请求引擎走棋,Backspace 撤销
npx nbb "14 Chess/main.cljs" /path/to/stockfish
需自行安装适合当前系统的 Stockfish 可执行文件,并传入解压后的可执行文件路径。仓库不附带引擎。Windows 也可把 stockfish.exe 放在 main.cljs 旁,不传参数即可启动。

使用 Box2D 物理的双人排球
操作 · 红方左/右移动、上跳跃;绿方 A/D 移动、W 跳跃
npx nbb "15 Volleyball/main.cljs"
游戏仓库根目录的 npm ci 会安装 box2dweb@2.1.0-b。

Chess 需要自行下载适合当前系统的 Stockfish 可执行文件,按表中命令传入路径。Volleyball 使用的 box2dweb 由 npm ci 安装。关闭游戏窗口即可退出。截图、源码和操作说明见 游戏展示。
截图来源
游戏素材来自标明出处的上游项目。provenance.json 记录截图来源与处理方式。截图不是兼容性或游戏测试报告。原游戏素材权利仍归各作者,预览不会改变其许可证。
原版 C++ 游戏及教程出处见 jsyqrt/games,参考迁移见 XadillaX/16-sfml.js-games-ported。node-sfml-demos 与 play-nes 分别记录各自的许可证和来源。

