一个为文本 RPG 游戏设计的 DSL,主要用于和 xyy 的 GalTextEngine 进行“军备竞赛”,不过目前来看,这个项目的完成度远超预期。
“DAG”的含义是有向无环图,一定程度上反映的是项目的设计思想。
- 一个 RPG 游戏由若干个场景
scene
组成 - 每一个场景中有一段描述
desc
以及一堆选项choices
desc
可以是给定的常量,这样它在整个游戏里就是一成不变的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")
就可以使用全部的功能了。建议先阅读示例。