Coding @ 04 June 2010, “3 Comments”

几天前尔宁找到VirtualII这个软件,凌晨两人聊天回忆过去,觉得该玩点什么,在模拟机上显示几个大字符应该不错,还有意义,于是开始动手。

一开始最直接的想法就是直接在低分辨率模式下用HLIN, VLIN画线条,我标记出各个点线坐标,尔宁在虚拟机上输入代码(那虚拟机还能模拟软盘的读写声音,太亲切太好玩了!),类似:

10 HLIN 1, 3, AT 2 : VLIN 2, 3 AT 1
20 HLIN 2, 3, AT 3 : VLIN 4, 6 AT 5

嗯,看来我们还没有忘记太多。

遇到第一个问题,这么写代码很繁琐,容易出错,发现出错后还不容易修改,而且不容易修改摆放的位置(比如居中,一个字符的点阵是6×8,不是8×8,屏幕是40×24,不是40+24 ;-) )

为解决移动和居中,可以引入两个代表屏幕位移的变量,比如:

10 HLIN 1 + X, 3 + X, AT 2 + Y : VLIN 2 + Y, 3 + Y AT 1 + X
20 HLIN 2 + X, 3 + X, AT 3 + Y : VLIN 4 + Y, 6 + Y AT 5 + X

不爽的是这样不仅代码不好看,而且做不到最后只用一行代码实现(那时候我们都互相比在一行代码中用更少的字符数)。

于是就想到不妨用代码来生成代码,上面提到的问题都容易解决。

我们同意这个思路可行,做法:

1 把画字符的线段方向和坐标用数组表示,每个字符是由多个笔画数组的数组,四个字符就有四个数组;
2 循环这四个数组,再循环它的笔画数组,生成画图语句的字符串,输出;

这样生成代码的程语言选择就多了,更好的是这样就可以用自己习惯的开发环境,不需要直接在那个模拟机下写。我们选择了PHP,简单,够快。

这时候,轮到我写代码,尔宁在旁观察,提醒拼写错误,偶尔讨论一下。

每次修改了PHP代码,就运行一次,把输出的代码放到一个用javascript实现的Applesoft BASIC解析器里运行看结果。

结果在尔宁的blog上可以看到,还有最终运行结果的截屏

回顾

这居然是我们兄弟俩第一次的结对编程 :D

再次证明:

0 结对编程可以很好玩,能够很快进入并保持状态;

1 好的测试环境和工具很重要(那个javascript BASIC 解析器省了我们很多时间);

2 尽量不在受限的部署环境下开发;

3 写程序是为了解决问题;

4 如果写程序中遇到了问题,可以再写程序来解决写那个程序解决问题时遇到的问题。GOTO 3;

5 不要忘记 GOTO

两人用一台i5 CPU, 4G内存的笔记本和一台1.6GHz CPU,2G内存笔记本(跑VirutalII),来实现一个在48K,40×24, 16色显示器的代码…… 够搞的,好玩 :D

好吧,可以说我们兄弟俩今天是够Nerd的,但肯定不是Nervous的 ;-)

P.S. 如果一定要看的话,PHP代码在这里