Game Of Life
康威生命游戏, 之前看到过 不过没有什么时间弄
这里用mathematica实现了下 (无限安利)
a tedious day =~=
a productive day(逃)
熟悉了下mathematica的导出gif
还没有在makedown里插过GIF.
另外博客可能写着写着有一部分是英文了 ..其实本来打算写全英文的.
不过感觉不好给别人看, 介绍部分还是写中文吧.
introduction
首先简单介绍一下《生命游戏》
生命游戏其实是一个零玩家游戏。它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。具体如下图:
每个格子的生死遵循下面的原则:
1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) 。
2. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;
3. 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变设定图像中每个像素的初始状态后依据上述的游戏规则演绎生命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案)。
细胞自动机在mathematica 上有内部实现
这里就不调用自动机了, 自己写的一个自动机(雾…)
my code
check = RandomInteger[1, {100, 100}];
updata[1, 2] := 1;
updata[_, 3] := 1;
updata[_, _] := 0;
SetAttributes[updata, Listable]
Dynamic[ArrayPlot[
check = updata[check,
Plus @@ Map[
RotateRight[check, #] &, {{-1, -1}, {-1, 0}, {-1, 1}, {0,
1}, {0, -1}, {1, -1}, {1, 0}, {1, 1}}]]]]
while it is not suitable for exportation, I changed Dynamic to Table, and export it to a gif file.
check = RandomInteger[1, {100, 100}];
updata[1, 2] := 1;
updata[_, 3] := 1;
updata[_, _] := 0;
SetAttributes[updata, Listable]
pic = Table[
ArrayPlot[
check = updata[check,
Plus @@ Map[
RotateRight[check, #] &, {{-1, -1}, {-1, 0}, {-1, 1}, {0,
1}, {0, -1}, {1, -1}, {1, 0}, {1, 1}}]]], {i, 1, 200}]
Export["fig.gif", pic]
Result
The result is shown below.
a random life game.
Conclusion
it illustrate the first 200 steps in a random setup,
while it takes too much time for my computer to count a bigger step…
but some beautiful things are still capable of being captured… ah ha ..
All in all, 以后每天还是写点更新, 每天一篇 记录(水)一下.(…雾)