- 注册时间
- 2008-11-17
- 最后登录
- 2008-11-18
②入门
- 积分
- 23
|
没底,实在心里没底。写下来放心点。
目前在下office等编程办公要用的软件了,也不能老玩游戏了。脑子乱乱的,随便写点。
首先,并不打算做成范用型的,而是针对特别应用来写。凡用的现在也有,似乎也无必要再发明轮子。我的打算是用来remake太阁5里的格斗小游戏,加上必要的对话,人物cg,背景cg显示,分支选择,实际上做出来的东西也可以用来独立制作文字游戏了。太阁5有一个自己的脚本编译器,我没研究过它的语法,也不打算参考那个来做,总之,实验和练手的成分比较大(也是我写这个的目的),毕竟我没做过游戏,想试试。
目前工程分为几个部分:
1.脚本编译器(C++)
2.脚本播放器(VC/directx)
3.script dump用来调试脚本的。(MFC)
4.资源打包器,以及解包程序。(MFC/C++)
使用的工具都在后面括号里了
脚本编译器主要还是实现前端,后端涉及到汇编,优化等操作系统相关的东西,想起来就头大,还是不要接触比较好。
脚本最终会翻译成类似汇编指令式的东西,由播放器解释执行,播放器就相当于cpu了,指令和执行的功能基本也是类似的。
比如ADD,SUB这类算术操作要提供,MOV,当然是赋值用,另外还有变量申明,用来开辟内存空间,goto指令和if指令配合用来实现跳转,循环,和分支选择。
变量里面分四种基本变量:整数,浮点,布尔,字符串。这四种变量可以单独申明,但不允许申明复合变量,复合变量只能用游戏规定的那些,比如“人物”这种变量,由hp,mp,sp等变量组成。
比如:声明一个人物
Person 张三;
张三.hp=100;
Person是个内置变量种类,hp是其中的成员变量,那么person,hp是否都应该申明为脚本的关键字呢?或许应该把这些变量类型放到声明表中比较好?
还有涉及到应用的特殊格式,比如一场战斗的描述
fight
Person 1,2,3....;参与战斗的人
Win 逻辑表达式 ;获胜条件
start:
;//发生在战斗开始处的事件
event:
if 表达式 then
else if 表达式 then
end if
//发生在战斗过程中的事件
end fight win:
;如果获得胜利的处理...
自写脚本就有这种好处了,因为格式可以很宽松。。。
再着就是表达式的问题,很是头大,逻辑表达式,算术表达式,太简单了功用小,复杂了实现麻烦,考虑到麻烦的变量匹配和转换问题,决定将四个基础变量减少到3个,统一用浮点表示整数算了。还有表达式中需要用到的临时变量也是个问题,变量可以回收,但是关系到变量的生存期等,感觉会变得很复杂了,不好搞。
播放器方面是用脚本指令驱动,即遇到什么就处理什么,还是用游戏循环,用状态机来决定每一桢的绘画内容?觉得后一种方式比较有把握,前种方式好像未知的麻烦会多一些。
此外战斗部分需要设计电脑的ai,这个业很有挑战性,目前还没思考到这一部分来。初步考虑,设计若干行动模式,模式可由脚本选择。
还有资源的导入和导出,资源压缩加密的算法已有,是否需要设计资源池呢? |
|