DeadAscend:Qt/QML 手绘风 2D 点击式冒险解谜游戏
《Dead Ascend》是一款手绘风格的 2D 点击式(point-and-click)冒险解谜游戏...
irmingard-backbone · gamebytes/irmingard-backbone
基于 Backbone Marionette 与 CoffeeScript 实现的单人纸牌接龙游戏。使用两副牌共 104 张(四花色,A 到 K,无大小王),开局按 1、2、3、4、5、4、3、2、1 张铺成列,目标是把全部牌按花色与点数升序移到 8 个弃牌堆。支持拖拽叠牌、双...
Irmingard 是一款以「清空牌桌」为目标的单人纸牌接龙(patience)游戏,使用 Backbone Marionette 与 CoffeeScript 构建,运行在浏览器中。作者在 README 中坦言,目前只支持单人模式,但他希望能和姐姐同时游玩——这也成为后续「协作模式」设想的起点。
与常见的 52 张纸牌接龙不同,Irmingard 使用两副牌共 104 张:四种花色(♠、♣、♦、♥),点数从 A、2、3 一直到 Q、K,不含大小王。游戏的核心目标是把所有牌按花色与点数升序(A 在前)送入弃牌堆。
项目最初是作者在 2012 年 11 月 CologneJS 演讲《Solitaire mit Backbone》的配套演示,因此它既是一个可玩的卡牌游戏,也是一份围绕 Backbone 生态组织前端代码的实践样本。
README 给出了简明的规则说明:
README 的 Technologies 一节列出了完整的技术栈:
README 的「Problems」一节记录了一个具体的回调时序问题:卡牌的 render 方法中无法直接设置可拖拽状态,因为渲染时 Backbone Relational 尚未更新该牌所属的 Column。作者观察到,Cards Collection 的 add 回调触发时,牌的 column 仍是旧值 4;直到 Column Model 的 handleAdd 回调执行,column 才更新为 0。作者提出的改进思路是:不在渲染时决定可拖拽性,而是在 Column.handleAdd 中更新,并让 CardView 绑定可拖拽性的变化来设置对应 HTML 属性,从而避免重复渲染。
README 用「Objects」一节拆解了游戏中的四类核心对象,这也是理解代码组织的入口:
README 给出了 Jasmine 规格的运行方式:
rails s,然后打开 localhost:3000/jasmine。guard-jasmine spec。需要注意,README 在技术栈中写的是「tests are in the making」,即测试当时仍在编写中,因此不能把测试覆盖视为已完成的能力。
README 的 Planned features 一节列出了作者当时尚未实现的方向:
这些均属于计划,而非现有功能。
这个项目适合作为「用 Backbone 生态组织一个完整前端小游戏」的阅读材料:可以重点看 Card、Column、Pile 三类对象如何通过 Backbone Relational 建立关联,以及拖放事件如何与视图状态联动。阅读时建议结合 README 中记录的 Callback Flow 问题,理解渲染时序与模型关联更新之间的先后关系;同时留意测试部分仍处于编写中的状态,不要预设已有完整测试覆盖。
《Dead Ascend》是一款手绘风格的 2D 点击式(point-and-click)冒险解谜游戏...
micropolisJS 是把 Micropolis(开源版《模拟城市》类城市模拟游戏)移植到 J...