生命游戏

本文最后更新于:2017 年 04 月 30 日 星期日

细胞自动机(英语:Cellular automaton),又称格状自动机、元胞自动机,是一种离散模型,在可算性理论、数学及理论生物学都有相关研究。该项目是一个该游戏的Web实现


细胞自动机(英语:Cellular automaton),又称格状自动机元胞自动机,是一种离散模型,在可算性理论、数学及理论生物学都有相关研究。它是由无限个有规律、坚硬的方格组成,每格均处于一种有限状态。整个格网可以是任何有限维的。同时也是离散的。每格于t时的态由t-1时的一集有限格(这集叫那格的邻域)的态决定。每一格的“邻居”都是已被固定的。(一格可以是自己的邻居。)每次演进时,每格均遵从同一规矩一齐演进。

whatever

就形式而言,细胞自动机有三个特征:

  • 平行计算(parallel computation):每一个细胞个体都同时同步的改变
  • 局部的(local):细胞的状态变化只受周遭细胞的影响。
  • 一致性的(homogeneous):所有细胞均受同样的规则所支配

该段摘自维基百科关于“Cellular automaton”的词条

如何使用

使用这个应用是十分简单的,你只需要点几下你的鼠标(或者手指)。

首先你需要打开页面Game of Life

通过单击50*50格网中任意一格可以将其状态在生与死之间切换。鼠标停留在任意格子上时其左和上方会有行列标高亮显示,以便于定位。

通过单击格子设定好初始值后,单击“开始”按钮即可开始演化。多次单击“开始”按钮可加快演化速度。

当你需要暂停时可以单击“暂停”按钮,此时演化将停止,状态将冻结。需要时你可以再次通过“开始”按钮继续。

在任何状态下都可通过单击“结束”按钮停止演化并清空格网。

控制台的两组复选框可以提供自定义的规则。

在任何状态下都可通过单击“重置”按钮停止演化并回复默认初始值及规则

所以你现在最好去动手试试,玩不坏的。

讲个故事

我为什么会想到制作这样一个页面呢?

在数周前我发现我的“程序设计基础实训”课程所要求的一些题目中有一道关于“生命游戏”的题。这让我回想起若干年前在电视节目中看过的一段影像。影像首先演示了一些格子的生存、死亡、出生的规则,然后设定了一个初始状态,这些格子在几条简单的规则下幻化出各种形状。没错,当我看到我的题目时我很快就意识到这就是我当年看到的东西。

当时我觉得很兴奋,于是很快做出了那个题目。题目要求很简单,一个C的命令行程序,输入初始值,然后打印出往后各代的情况,直到后代数达到某个阈值。我把难度加大到了我比较满意的程度,做成了一个相当漂亮的命令行的“频闪动画”。这个程序的源代码我还保留着(单击超链接可以前往查看)。然后我盯着命令行一遍一遍地试,修改初始值和规则,但这并不简单。初始值要靠一堆的01字串输入,即使后来我把输入重定向到了一个文件中,这仍很麻烦;修改参数需要通过修改源代码。所以我萌生了做一个漂亮点的生命游戏模拟器的念头。

我觉得怎么才能算是漂亮呢。他应该有一个漂亮的图形界面,而不是命令提示行的小黑框;他可以通过点击格子的方式设定初始值;然后他可以随时开始、暂停;他可以简单地改变规则;他甚至应该可以在运行过程中修改规则和格子状态……一大堆的想法马上冒了出来。

我想到了网页,为什么呢?

  1. 网页可以定制精美的外观
  2. 网页拥有足够的兼容性、他轻量化、易于传播
  3. 通过JavaScript完全可以实现我对这个应用功能的全部幻想

所以他现在是个网页。而且很不幸的是,他比我最初想象的还要漂亮和强大。

关于

作者:Keyboard L,E-mail:keyboard-l@outlook.com

项目仓库:Game_of_Life

喜欢该项目?可以选择小额赞助