用 React + es6 完成一个著名的生命游戏(Game of life,Conway)
2017-04-14 12:25
447 查看
http://elevenbeans.github.io/2017/04/05/Game-of-life/
这是有名的康威生命游戏, 描述的是一种细胞自动机。
对一个 M*N 的区域,每一个位置有两种状态,1为活细胞,0为死细胞,对于每个位置都满足如下的条件:
如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡
如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活
如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡
如果死细胞周围正好有三个活细胞,则该位置死细胞复活
我们用置换方法 in-place 来解题,不新建一个相同大小的数组,只更新原有数组。所有的位置在同一个周期必须被同时更新,但是在循环程序中我们还是一个位置一个位置更新的,那么当一个位置更新了,这个位置成为其他位置的 neighbor 时,我们怎么知道其未更新的状态呢,我们可以使用状态机转换:
状态0: 死细胞转为死细胞 (dead 黑色)
状态1: 活细胞转为活细胞 (old 红色)
状态2: 活细胞转为死细胞 (dead 黑色)
状态3: 死细胞转为活细胞 (young 粉色)
最后我们对所有状态对2取余,那么状态0和2就变成死细胞,状态1和3就是活细胞。
我们先对原数组进行逐个扫描,对于每一个位置,扫描其周围八个位置,前序细胞(左上/中上/右上/左)如果遇到状态1或2,就计数器累加1,后续细胞(右/右下/中下/左下)遇到取余为1,计数器也累加1。
扫完8个邻居,如果少于两个活细胞或者大于三个活细胞,而且当前位置是活细胞的话,标记状态2,如果正好有三个活细胞且当前是死细胞的话,标记状态3。
完成一遍扫描后对数据更新一遍,变成我们想要的结果。
GitHub
repository
Demo地址
![](https://raw.githubusercontent.com/elevenBeans/Game_of_Life/master/src/images/GOL.png)
这是有名的康威生命游戏, 描述的是一种细胞自动机。
对一个 M*N 的区域,每一个位置有两种状态,1为活细胞,0为死细胞,对于每个位置都满足如下的条件:
如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡
如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活
如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡
如果死细胞周围正好有三个活细胞,则该位置死细胞复活
我们用置换方法 in-place 来解题,不新建一个相同大小的数组,只更新原有数组。所有的位置在同一个周期必须被同时更新,但是在循环程序中我们还是一个位置一个位置更新的,那么当一个位置更新了,这个位置成为其他位置的 neighbor 时,我们怎么知道其未更新的状态呢,我们可以使用状态机转换:
状态0: 死细胞转为死细胞 (dead 黑色)
状态1: 活细胞转为活细胞 (old 红色)
状态2: 活细胞转为死细胞 (dead 黑色)
状态3: 死细胞转为活细胞 (young 粉色)
最后我们对所有状态对2取余,那么状态0和2就变成死细胞,状态1和3就是活细胞。
我们先对原数组进行逐个扫描,对于每一个位置,扫描其周围八个位置,前序细胞(左上/中上/右上/左)如果遇到状态1或2,就计数器累加1,后续细胞(右/右下/中下/左下)遇到取余为1,计数器也累加1。
扫完8个邻居,如果少于两个活细胞或者大于三个活细胞,而且当前位置是活细胞的话,标记状态2,如果正好有三个活细胞且当前是死细胞的话,标记状态3。
完成一遍扫描后对数据更新一遍,变成我们想要的结果。
GitHub
repository
Demo地址
![](https://raw.githubusercontent.com/elevenBeans/Game_of_Life/master/src/images/GOL.png)
相关文章推荐
- 康威生命游戏 Conway's game of life
- python实现生命游戏的示例代码(Game of Life)
- 详解Python 实现元胞自动机中的生命游戏(Game of life)
- 生命游戏/Game of Life的Java实现(转)
- LeetCode 289. Game of Life(生命游戏)
- The game of life(生命游戏)新算法
- 康威生命游戏(Conway's Game of Life)的一种实现
- LeetCode 289. Game of Life(生命游戏)
- LeetCode 289. Game of Life (生命游戏)
- LeetCode 289 Game of Life(生命游戏)(Array)
- [LeetCode] Game of Life 生命游戏
- Conway’s Game of Life中看C++SSE2并行化计算
- Game Engine Architecture阅读 1.1 一个典型游戏开发团队的结构(Structure of a Typical Game Team)
- Conway’s Game of Life中看C++SSE2并行化计算
- IDL实现的元胞自动机模型 Conway Life Game
- intel2011多线程编程大赛之一Game Of Life 最优寻址多线程
- Game Engine Architecture by Jason Gregory:1.3 什么是一个游戏引擎
- (翻译)Tricks of the windows game programming Gurus(Windows游戏大师之路) --- 前言(作者:ANDRE LAMOTHE 1999)
- 一个js游戏引擎,没完成呢还,自己写的
- 【翻译】生命的意义 (The Meaning of Life)