(1)
本想着这个月的日志数可以达到5或者6的,可是最近这几天又忙着做Lieo Jump Building v2.0(以后简称LJB2)去了,所以一直没有过来更新。
对了,在编写LJB2的第一天(2011年3月22日)中午去1楼食堂吃饭,发生了迄今为止第5次奇妙的事情。有些童鞋似乎对我所谓的“奇妙的事情”很感兴趣,不过大家不要来问我了,这是我想保留的一个小秘密吧,嘿嘿。
在学校的日子虽然没有在家里过得快,但转眼间第4个星期已经结束了。每天的生活都差不多:7点50起床,然后去上课,上课的时候看自己的书或者是80×86,在食堂吃难吃的饭,回来打开电脑整程序,晚上一边上QQ解答N个人的问题一边整LJB2,到23点的时候玩下NDS睡觉。周而复始。
不过平淡的日志中间夹杂着很多插曲,也使我的生活不单调。具体将在下面记述。
(2)
如很多同学上个学期就知道了,我将用汇编语言重新编写在高中时用GVBASIC编写的在文曲星上运行的“Lieo跳楼游戏”。而这个项目终于在3月22日动工了!
为什么要用16位的汇编语言编写呢,呃,这更多的是兴趣问题吧。大三上学期学了一个学期的汇编语言,还没有任何成果作品出来,实在是不甘心(哦,貌似也没用Java做一个像样的东西出来)。所以呢,背负着众多人的“期盼”,就开始动手做了!
说到使用汇编语言做图形界面,那只能用一个字来形容——“爽”!虽然很麻烦,但还是进展得非常顺利。这个小游戏完成之后会有一个详细的开发和说明文档,到时候部分文档会公开,奋斗在asm战线的筒靴们也不妨参考一下。
现在呢,主要是完成了显示和处理各类对话框过程的设计。要用16位汇编设计几个通用的对话框确实很不容易啊,特别是在只使用DOS提供的画点功能的情况下。我要从最基础的画直线开始,层层向上实现画矩形、填充区域、画位图(自己设计的8×8位图)、画按钮、通用对话框模版、特殊对话框模版等,实在是工作量很大,过程调用时嵌套的层次也非常多。
我目前的设计是——在实现各类绘制基本图形过程的基础上,设计一个名为DLGROOT的过程,作为所有对话框的“基本模版”,总体负责创建对话框内容和接收用户输入,对于派生出的各种样式对话框,只需要按照各自的特性设置好参数并调用DLGROOT,就可以把它显示出来。这部分的过程调用示意图如下:
可以看到要创建一个对话框所需要直接或间接调用的过程是非常之多,以至于我觉得这样设计和面向对象的设计很像,要画一个按钮要逐层向上调用各种基类的构造方法。所以呢,DLGROOT的描述就是山寨了.NET Framework里Object类的描述。上图示意的处于最高层的4种类型的对话框MSGDIALOG、MSGDIALOGEX、OPTDIALOG、EXBTDIALOG运行效果如下图所示(保存为JPG后有些偏色,黄色都快成为白的了),这些对话框创建的过程中全部调用了DLGROOT:
这是一个良好的开端,我也更有信心做接下来的工作。目前看来,完全使用汇编语言编写程序的难点有以下几个:
1. 寄存器的数量有限,当有大量数据要处理的时候要在内存和寄存器中反复做数据的传送;
2. 在过程调用的时候,参数的传递很麻烦,如果使用寄存器的话,参数太多的时候明显不够用,如果使用堆栈的话,如果反复使用的参数没法实现,而且数量一多要记顺序肯定会晕掉;(目前我采用的做法是在内存中专门开辟一块区域专门存放某一过程的传入参数和传出参数)
3. 几乎所有的功能都不能像高级语言那样有事先设计好的LIB或DLL可以调用,都需要自己从头开始实现;比如BIN to ASCII、Draw Line等等;
4. 为了尽量减少今后在游戏过程中数据处理的量(因为图形处理也是在CPU中完成的),现在基本在避免需要占用几十个CPU周期的MUL和DIV指令;
5. 最重要的一点:调试程序特别麻烦。我不能像其他汇编程序那样使用DEBUG、Code View等调试器进行调试,因为这是个图形应用程序,而Win 7不支持全屏,运行程序也只能在DOSBOX下运行,更别提调试了;我仿佛再次回到了之前的GVBASIC时代。
不过呢,这些困难也终究会被克服,接下来的工作我也会更加努力的。
(3)
上文提到的插曲主要是:不断地有人来找我去:(1)和他一起去做软件;(2)给他们团队当“技术”。我的回答只能是:“额,Heh heh”。具体将在今后记述吧。
上周某同学说要去秦岭玩,额,处于计划经济阶段的我表示压力很大,不过我还是去吧。
最近把A+B Problem给很多人在做,只有两个人完成得还比较令我满意。感觉很多人的心还是太浮躁了吧。
这几天有同学走了,还有一些事情,心里还是有少东西吧。这里也不多说了,就写到这吧。