关于复杂自适应系统的一切曾经是学生时代的最爱,其中一个很有代表性的原型就是这种叫做“生命游戏”的元胞自动机。后来由于种种原因,并没有把这个兴趣深入延续下去。最近在看一本关于HTML5的书,读到关于canvas的一章,突然有点手痒,花了一个下午的时间,用Javascript写了一个简单的生命游戏。
记得在学校的时候,也用ASP和Javascript来写过一个:ASP用来动态生成table,Javascript用来控制其中的td的背景色,在IE4上运行。相比现在的HTML5,那实在是一种繁琐和简陋的尝试。当时,由于对这些简单的数学程序背后隐藏的复杂世界的着迷,还用VB6开发过一些可以在网页上运行的ActiveX控件,可以通过调整方程的参数生成一些分形图画。其中一部分控件用的是当时微软大力鼓吹的ActiveDocument技术(即OLE的Web翻版),现在已经没有多少人记得了。如今,HTML5终于横空出世,并迅速普及,那么再过10年,是否还会有人记得现在的Flash、Sliverlight和Ajax呢?
在近期的展会上,基于HTML5的PACS/RIS已经横空出世。在iPad上达到医用质量的图像显示,至少软件层面的障碍已经清除。也许某一天,HTML5 API真的可以成为一个新的,更有生命力的行业标准,以及一个一统Web前端应用领域的开发平台。而在此过程中蕴藏的种种机会,正等待着大家去挖掘。
下面是生命游戏的完整源码,感兴趣的朋友可以复制粘贴到本地一个html文件中,用IE9以上版本打开。我在自己的机器(Intel i3 M350)上发现用IE9运行时确实比较慢,每一代之间都有明显的短暂停顿,CPU占用率在25%以上。但完全相同的代码,在Opera10上运行就快得多,几乎感觉不到停顿,CPU占用率在25%以下。我在网上看到国外某大学学生的作品,在IE9上跑速度比我的快很多,估计做了一些算法上的优化。据说IE10对Javascript引擎做了很大的性能提升,我原本不是个热衷于升级软件的人,但现在却莫名地冲动。
下面是程序在Opera10上运行的截图,细心的读者会发现,在暂停状态下还可以用鼠标来种植新细胞,您可以动手创造一些有着有趣演化规律的细胞群。