以下谈到的项目在GitHub:shuaitq/Game-of-Life可以找到全部源码
生命游戏
康威生命游戏(英语:Conway’s Game of Life),又称康威生命棋,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。它最初于1970年10月在《科学美国人》杂志上马丁·葛登能的“数学游戏”专栏出现。 ——维基百科
维基百科链接Conway’s Game of Life
简而言之就是,在一个二维空间内每一个格子就是一个「细胞」,每个细胞存在着两种状态,生和死,并通过一定的规则进行演算的结果。
规则
最为经典的「B3S23」
- 当前细胞为存活状态时,当周围八个细胞低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。(模拟生命数量稀少)
- 当前细胞为存活状态时,当周围八个细胞有2个或3个存活细胞时, 该细胞保持原样。
- 当前细胞为存活状态时,当周围八个细胞有3个以上的存活细胞时,该细胞变成死亡状态。(模拟生命数量过多)
- 当前细胞为死亡状态时,当周围八个细胞有3个存活细胞时,该细胞变成存活状态。 (模拟繁殖)
就这样简单的规则和初始状态决定了生命游戏的发展。
各种各样的生命
生命游戏项目
这个项目是用来进行生命游戏的模拟,这已经是第二版了。第一版的时候采用的是Json格式文件存储生命游戏的初始状态和各种参数,所有的想要用的生命都要去网上找到图然后输入到Json文件中,很麻烦
|
|
而在这一次重构时发现了rle通用文件格式,已经有大量以rle格式存储的生命文件,于是选择了取消Json文件,改用rle文件,多余的参数采用getopt进行读取。关于rle文件的具体解析过程可以看上一篇博客。
|
|
当时第一版的时候重点使用了多线程和异步化存储来优化性能,第二版取消了这些优化,转而使用淳朴的单线程一方面是我发现计算性能并不是瓶颈,瓶颈主要在硬盘IO上,另一方面是我懒。所以这次的重点放在了rle文件的解析上面,毕竟只要支持了rle文件就再也不用手动编写生命游戏的生命模板了(逃
主要改变
- 能够读取通用rle模式文件
- 使用方法 ./Game.out -p [RLE文件目录] -t [模拟次数]
- 支持标准规则表示法B3/S23
- 使用PPM图片格式作为输出
感谢
感谢LifeWiki完整的各种资料,包括且不限于:
- 完整的RLE文件格式文档。
- 巨量的RLE模式文件总计2000+,和各个模式的资料。