写这个项目的直接原因是最近推galgame推得有点过头,gal推过头的直接结果就是YY能力上涨,抱着“我也想写好玩的剧本”的轻率念头,也就开始了这个项目。不过从直接感觉来说,galgame毕竟也是开发成本(个人)以及技术要求最低的游戏类别之一,这当然也算是原因。
于是到了现在,一个半成品式的框架就搭好了。实话实说,gal引擎开发,技术难度不算大。但是,需要考虑的方面却相当多,许多看起来很简单的东西开发起来却很麻烦,看上去很麻烦的东西只要换个思路,就会大为简化。
这篇文章涉及的只是一个Galgame引擎,剧情和素材方面,直接使用guochaoer君的Sakia。后者是一个自制的galgame,在google code上托管,开发时间先于我一年。guochaoer君的代码,给了我不少思路和代码方面的启迪,在此给予深深感谢。有兴趣的话,请务必拜会guochaoer君的项目,地址 Sakia
不多说了,现在考虑引擎的编写。
我们需要几个初期的目标,我的初期目标为:
1.一个能稳定运行的,可扩展的框架
2.代码逻辑和剧情内容彻底分开
第一个目标是显然的,关键是第二个。之所以提出这个目标也正是因为guochaoer君的代码,他的代码实际上写得不错,但是最大的弊病是代码和剧情文本混在一起,整体上来看,就显得比较凌乱,耦合度太高。这样做还导致一个问题:代码扩展性不太好。如果后面需要增添功能的话,很有可能大改,在效率上不太划算,也容易失误。
所以,我做了这样的设计:代码的执行部分放在run.py这个程序中,而剧情,图片,音乐,放在一个script文本中,代码和文本通过一个Parser解析器来联系。
文本的解析,就我掌握的部分---也是通常的手段,就是正则式。
为了解析方便,规定特定的语法是必要的。
在定义语法之前,先明确哪些语法是必须的,这涉及到一个问题是:一个gal,最基本的元素是什么。也就是说,舍弃掉哪些内容,gal才是gal,而不会被认为是别的什么?