MARIO.GAME
zh

MariOCaml

用 OCaml 编写的 Super Mario 平台游戏,关卡随机生成

MariOCaml

关于 MariOCaml

MariOCaml 由 Matthew Hsu、Liam Bui 和 Ashley Xue 在康奈尔大学(Cornell University)创作,最初是一门函数式编程课程的期末项目,后来成为 GitHub 上最受欢迎的 OCaml 项目之一。

整个游戏——物理系统、敌人、道具、摄像机和渲染器——全部用 OCaml 编写,并通过 js_of_ocaml 交叉编译为 JavaScript,因此可以在普通网页中运行。底层有一个负责管理游戏状态并运行主循环的“导演”(director),同时由程序化生成器在网格上构建每个关卡,并确保关卡可以通关。

成品看起来像 SNES 时代的 Mario 游戏,但又有些不同:每次加载,你都会看到不同排列的砖块塔、金币云和 Koopa Troopa。有些布局很精巧,有些则很混乱——这正是随机关卡的魅力。

操作方式

按键动作
← → 或 A D移动
空格、↑ 或 W跳跃
↓ 或 S蹲下

特色

  • 100% 使用函数式语言 OCaml 编写
  • 随机关卡生成器,自动放置砖块、金币、敌人和缺口
  • 包含得分、金币计数、游戏结束和通关画面
  • 砖块破碎和踩扁敌人时会有粒子特效

小技巧

  1. 左上角的数字是帧率,不是计时器,所以不用着急。
  2. 可以把龟壳踢向其他敌人,连续得分。
  3. 如果生成的关卡很别扭,点击重新开始按钮重新加载画面,就能获得新的布局。

常见问题

什么是 OCaml?

OCaml 是一种在学术界和业界都有应用的函数式编程语言。MariOCaml 证明了它在编译为 JavaScript 后,也能驱动一款完整的实时游戏。

每次的关卡都不一样吗?

是的——每次加载都会随机生成关卡,所以每次重新开始都会得到新的地图。

MariOCaml 是谁制作的?

Matthew Hsu、Liam Bui 和 Ashley Xue。该项目以 MIT 许可证开源。

更多好玩的游戏