一款浏览器里直接运行的无尽跑酷游戏,玩法参考地铁跑酷:三车道、跳跃、滑铲、躲避障碍、收集金币。纯原生 JavaScript 和 Canvas 实现,零依赖,双击即可玩。
在线试玩:https://qls-cyber.github.io/subway-dash/
Subway Dash is an endless runner that plays instantly in the browser, built with vanilla JavaScript and Canvas. No build step, no dependencies.
- Three-lane dodging with jumps and slides, pseudo-3D projection rendering
- 8 pick-up power-ups: magnet, shield, dash, double coins, slow motion, spring shoes, coin shower, extra life
- Rideable trains: hit the striped ramp and run on freight car roofs for bonus coins
- A Venom-style symbiote monster chases you the whole run and bites when you crash
- Rotating roadside scenery: lamps, flower beds, metro entrances, trees, benches
- Keyboard and touch controls; best score persists in localStorage
Play online: https://qls-cyber.github.io/subway-dash/ — or just open index.html locally. Full documentation below is in Chinese.
直接双击 index.html,用 Chrome / Edge 等现代浏览器打开即可。
也可以起一个本地服务器:
cd subway-dash
python -m http.server 8000
| 按键 | 动作 |
|---|---|
| ← → 或 A D | 切换车道 |
| ↑ 或 W 或 空格 | 跳跃 |
| ↓ 或 S | 滑铲 |
| P 或 Esc | 暂停 |
| Enter | 开始 / 重开 |
手机端:左右滑动换道,上滑跳跃,下滑滑铲,轻点确认。
- 三车道无限向前延伸,速度随时间提升,障碍密度同步增加。
- 障碍类型:
- 低栏杆:需要跳跃。
- 高空横梁:需要滑铲,跳起来反而会撞。
- 高墙:必须换道。
- 高客车厢:必须换道,跳不上去。
- 矮货运车厢 + 坡道:冲上坡道自动登顶,可以在车顶上跑,车顶有金币;走到边缘自动下落,普通跳跃也可以直接跳上车顶。
- 金币连击有倍率加成,1.6 秒内连续吃到金币会累计连击。
- 撞上障碍即结束,分数 = 距离 + 金币分,最高分和累计金币存本地。
- 跑道两侧布景按槽位轮换:路灯、花坛、地铁口、树、长椅,左右两侧错开排布。
- 黄昏城市天际线与落日背景,速度越快画面边缘泛起红色压迫感。
游戏中有 8 种道具,悬浮在轨道上,与金币同高度拾取。效果时长与刷新权重都在 js/config.js 中调整。
| 道具 | 效果 |
|---|---|
| 磁铁 | 8 秒内自动吸附三车道所有金币 |
| 护盾 | 抵挡一次撞击,抵消后碎裂 |
| 无敌冲刺 | 3 秒 1.5 倍速,撞碎一切障碍,每个 +5 分 |
| 双倍金币 | 10 秒金币分值翻倍,可叠加连击倍率 |
| 子弹时间 | 4 秒世界速度降至 60%,操作手感不变 |
| 弹簧鞋 | 10 秒跳跃高度 +40%,可跳过墙 |
| 金币雨 | 立即在前方三车道铺 5 排金币 |
| 保命心 | 撞毁时原地复活一次并清空连击,约 5% 概率刷新 |
人物身后始终跟着一只以毒液为原型的黑色怪物,全身可见:白色吊眼带血丝、裂至耳根的双层尖牙、分叉长舌、滴落的绿色黏液、白色血管纹与利爪。随速度提升它会变得更近更大。撞上障碍时怪物会扑上来咬住人物,配合低吼音效与红色压迫感滤镜。怪物的体型与距离参数在 js/config.js 的 MONSTER_ 常量中调整。
subway-dash/
index.html 页面骨架与 UI
style.css 界面样式
js/config.js 数值配置,所有手感参数集中在这里
js/audio.js WebAudio 合成音效与背景音乐
js/input.js 键盘与触摸输入
js/world.js 世界状态、障碍金币生成、碰撞判定
js/render.js 伪 3D 投影渲染
js/game.js 游戏状态机与结算
js/main.js 入口与主循环
想调整难度或手感,只改 js/config.js 即可:
START_SPEED/MAX_SPEED/ACCEL:初速、极速、加速度。JUMP_V/GRAVITY:跳跃力度和重力,数值越大跳得越高或落得越快。SLIDE_TIME:滑铲时长。SPAWN_BASE/SPAWN_MIN:生成间隔区间。MONSTER_*:追逐者体型与距离。POWERUP_*/FX_*:道具刷新率与效果时长。
- 推送到 main 分支后 GitHub Pages 自动重建,站点为 https://qls-cyber.github.io/subway-dash/
- 改完代码后必须把 index.html 里的
?v=N全部 +1,否则浏览器会缓存旧文件 - 不要提交 .github/workflows/ 下的文件(当前令牌无 workflow 权限)
MIT,见 LICENSE 文件。