一个为文本 RPG 游戏设计的 DSL,主要用于和 xyy 的 GalTextEngine 进行“军备竞赛”,不过目前来看,这个项目的完成度远超预期。
“DAG”的含义是有向无环图,一定程度上反映的是项目的设计思想。
- 一个 RPG 游戏由若干个场景
scene组成 - 每一个场景中有一段描述
desc以及一堆选项choicesdesc可以是给定的常量,这样它在整个游戏里就是一成不变的desc也可以由lambda表达式求值得到。lambda表达式有能力访问游戏的全局状态表game-env,能改变某些状态,或者根据状态返回不同的desc,参见game-with-env.rkt- 为了方便话痨游戏,同时减少游戏的状态总数,
desc可以是嵌套了任意层的list,参见big-gossip.rkt
- 选择一个
choice会让游戏移动到下一个scene- 同理,移动到哪一个
scene也可以由一个lambda表达式决定,同样参见game-with-env.rkt
- 同理,移动到哪一个
只需要
(require "dagc.rkt")就可以使用全部的功能了。建议先阅读示例。