Simple Life Game in HTML5
想着好久没写blog了,刚好在看计算中的上帝时,里面有提到生命游戏,所以就顺手写了一个,顺便凑篇文章。
先说说HTML5。看过一堆HTML5的应用,也想着自己做一些东西出来,挑来捡去最后还是选中的Canvas,可能还是对音视频不是十分感冒吧。Canvas是HTML5中新加的一个元素,主要作用就是在网页上直接画画。Canvas是一个矩形的区域,可以通过JavaScript程序控制上面的每一个像素。个人感觉和普通的GUI程序十分类似。
下面是Life Game,wiki链接在此。这是一个零玩家游戏,其实它就是一个简单的状态机。在一个点阵中,每个点都有0, 1两种状态,分别表示这个点的死与生。某个点的下一步的状态由它周围的8个点决定。周围的点数过多或者过少都会造成此点的死亡(生命是多么的不容易啊~)。规则很简单,只有4条,但是由这4条规则可以演化出许多好玩的东西,据说如果时间够长的话,可以看到从混沌到有序这一神奇的过程,唔,我是还没看到大规模有序的出现,以后再说吧~
至于算法…..就是拿JS写了个最简单的,把所有状态存放在一个二维数组中,每一步去遍历这个数组,然后根据周边点的状态决定被遍历点下一步该是生还是灭。很暴力的直接循环了,三年前的小破本T61还是能跑的起来的,嗯~
目前程序的初始状态是随机生成5e4个点放在Canvas中,以后如果有空的话,会考虑从本地文件中载入点的座标以及存储点到本地文件中,可以以后接着算,据说HTML5有对本地存储据做支持,就当继续学吧。
网页的地址在 http://www.hzmangel.info/html5/life/life.html ,start开始跑,stop停止,每刷新一次会重新生成一堆随机点。size表示点的边长,最小值是2吧,其实算是在程序里面hard code的了,下面那个speed是每一步的时间,如果有更改记得改完后点update。程序是用HTML5(Canvas+FormWidget)+CSS3(圆角框)+WebFonts(G家的服务)弄的,所以请自行选择靠谱的浏览器和网络环境~