greenwall · awlzac/greenwall
一款 Java 编写的 Android 街机风格小游戏:把各种水果、食物抛向墙壁砸烂。作者自述这是其首次尝试 Android 开发,没有测试用例,代码状态操作多、耦合紧。玩法据说每回合逐渐加快、难度递增。仓库提供了 Google Play 安装链接,具体可...
Untrusted 是一款把「写代码」本身变成核心机制的浏览器游戏:玩家扮演 Dr. Eval,被困在一台名为 MACHINE CONTINUUM 的机器现实之中,唯一的工具就是随手可用的计算机和 JavaScript 的图灵完备能力。与常见的编程教学游戏不同,它并不设置独立的代码练习关卡,而是要求玩家直接编辑、重新执行正在浏览器里驱动这款游戏的 JavaScript 源码,通过改写「世界运行的规则」来为自己开出一条生路。这种把游戏逻辑与玩家可操作对象合二为一的设计,使它成为早期「元游戏(meta-game)」与编程解谜交叉领域里颇具代表性的作品。
从玩法结构看,每一关同时呈现两个层面:一个是类似 roguelike 的网格地图,包含墙壁、道具、敌人与终点;另一个是展示该关 JavaScript 源码的控制台窗口。关卡在加载完成的那一刻通常是「不可通关」的——通路被堵死、道具不可达、规则被故意写坏。同时,绝大部分代码被锁定,玩家只能编辑用特殊标记划出的少数几行甚至行内片段。玩家的任务就是在这些有限的编辑点上做最小改动:重写条件判断、修改坐标、替换对象属性、绕过碰撞逻辑,甚至篡改渲染函数,最终让 Dr. Eval 抵达通往下一关的出口。每一次修改都需要重新执行,代码与地图之间的因果关系会立刻以视觉方式反馈出来,这正是游戏最核心的乐趣。
关卡内容以自定义的 .jsx 文件描述。它在普通 JavaScript 之上扩展了一套注释式标记:用 #BEGIN_EDITABLE# 与 #END_EDITABLE# 包裹整行可编辑区域,用 #{# 与 #}# 包裹行内的可编辑片段,用 #START_OF_START_LEVEL# 与 #END_OF_START_LEVEL# 界定 startLevel 方法的首尾,文件顶部的属性块则声明本关引入的新命令(commandsIntroduced)、地图属性(allowOverwrite、keyDelay、refreshRate、showDrawingCanvas、showDummyDom)、背景音乐、开局提示语、版本号以及通关后自动接续的下一关。若新增了玩家可用的命令,还必须同步登记到 reference.js 中。要贡献关卡,只需在 levels/bonus 目录下新建 jsx 文件并把文件名加入 game.js 的 bonusLevels 数组。
技术实现上,项目没有使用任何商业游戏引擎,而是自研了一套小型框架:roguelike 风格的网格渲染与视野计算借助 rot.js 库,代码编辑窗口基于 CodeMirror 实现(并支持多行编辑),音频由 sound.js 中的 tracks 数组统一管理 MP3 曲目。构建流程由 Makefile 驱动:执行 make 会把分散的 JavaScript 源码合并到 scripts/build/untrusted.js 并开启调试特性;make release 则进一步压缩为 untrusted.min.js 并关闭调试;通过 make mod=example_mod 还可以在 mods 目录下打包自己的改版。所有逻辑最终都在浏览器端运行,属于纯前端项目。
运行方式有两点需要注意:由于涉及 Access-Control-Allow-Origin 限制,直接双击打开 index.html 并不能正常加载,必须用本地服务器提供页面。README 给出的路径是先 npm install http-server 安装简易服务器,再执行 make runlocal。这意味着本地体验需要 Node.js 环境与 npm,构建环节还需要 make 工具(Windows 用户通常需要额外配置类 Unix 构建环境)。国内环境下 npm 依赖安装可能较慢,建议配置镜像源;游戏本身不依赖外部 CDN,联网需求很低。此外官方主页提供了在线版本,可以直接在浏览器里试玩,无需任何本地配置。
内容规模方面,正式关卡之外还有奖励关卡,并配有完整原声带:曲目来自多位独立音乐人,包含 CC-BY、CC-BY-NC-SA、公有领域以及获得授权使用的作品,官方在 README 中按出场顺序列出了全部曲目与出处,并提供了 SoundCloud 合集链接。授权采用双重模式:Untrusted 本体与音乐以 CC-BY-NC-SA 3.0 发布,允许非商业使用与修改,但要求署名并以相同协议共享;不含音乐部分的代码另可按商业许可授权,需联系作者洽谈。
适合用来学习什么?首先是 JavaScript 的语言细节——作用域、闭包、原型、数组与对象操作、事件回调,因为玩家必须在只读上下文里读懂别人写的代码并做精准改动。其次是「可编辑关卡」这一关卡设计范式:通过标记划分可写区域、用属性块声明关卡能力,是一种值得借鉴的关卡数据驱动思路。再次是浏览器端小游戏的工程组织:源码合并与压缩构建、模块拆分、音频与编辑器等第三方库的集成。需要注意的门槛是:游戏假定玩家已具备基础 JavaScript 阅读能力,完全零基础者可能在上手几关后就卡住;同时由于其非商业授权,若想把它改造成教学产品或商用项目,需要仔细确认音乐与代码各自的许可条款。
NBlood 是用 EDuke32 引擎技术与开发思路对 Build 引擎游戏所做的逆向工程移...
CatacombGL 是 Catacomb 3D 与 Catacomb 冒险三部曲(Abyss、Armageddon、Apo...