matlab 生命游戏
2016-11-22 22:28
246 查看
本文转载自http://www.cnblogs.com/cfantaisie/archive/2011/04/11/2012937.html
英国数学家J.H.Conway在1970年提出一种被称作“生命游戏”的小游戏。
Life游戏实际上是一种模拟,并不是游戏者之间的游戏。它在一个无边界的矩形网格上进行,这个矩形网格中
的每个单元可被一个有机体占据,或者不被占据。被占据的单元称为活的,未被占据的单元称位死的。哪个单
元是活的要根据其周围活的邻居单元数目而一代代地发生变化。
游戏规则如下:
1. 给定单元的邻居是与它在垂直,水平或对角上相界的8个单元。
2. 如果1个单元为活的,但没有邻居单元是活的,或者仅有一个邻居单元是活的,则在下一代,此单元
会因为孤独而死亡。
3. 如果1个单元周围有2个或者3个邻居单元为生,则该单元在下一代也是活的。
4. 如果1个单元是死的,则在下一代,如果它刚好有3个邻居单元是活的,则此单元变成活的。
所有其它死的单元在下一代仍然是死的。
5. 如果1个单元为活的,且有4个或者4个以上邻居单元是活的,则在下一代,此单元会因为拥塞而死亡。
6. 所有出生和死亡都刚好在同一时间发生,则此单元的死亡有助于另一个单元的出生,但它不能通过
减少拥塞而阻止其他单元的死亡;正在出生的单元也不能保护或者杀死上一代中活的单元。
依此规则进行迭代变化,使单元生生死死,会得到一些有趣的结果。该游戏之所以被称为“生命游戏”,
是因为其简单的游戏规则,反映了自然界中的生存规律:如果一个生命,其周围的同类生命太少的话,
会因为得不到帮助而死亡;如果太多,则会因为得不到足够的资源而死亡。
用计算机模拟这个“生命游戏”设定图像中的初始配置后依据上述的游戏规则演绎生命的变化,
由于初始状态和迭代次数不同,将会得到各种的优美图案。
本文在matlab下模拟了个“生命游戏”,不足之处由于初始状态随机设置,图案美观性欠缺…
matlab代码如下:
英国数学家J.H.Conway在1970年提出一种被称作“生命游戏”的小游戏。
Life游戏实际上是一种模拟,并不是游戏者之间的游戏。它在一个无边界的矩形网格上进行,这个矩形网格中
的每个单元可被一个有机体占据,或者不被占据。被占据的单元称为活的,未被占据的单元称位死的。哪个单
元是活的要根据其周围活的邻居单元数目而一代代地发生变化。
游戏规则如下:
1. 给定单元的邻居是与它在垂直,水平或对角上相界的8个单元。
2. 如果1个单元为活的,但没有邻居单元是活的,或者仅有一个邻居单元是活的,则在下一代,此单元
会因为孤独而死亡。
3. 如果1个单元周围有2个或者3个邻居单元为生,则该单元在下一代也是活的。
4. 如果1个单元是死的,则在下一代,如果它刚好有3个邻居单元是活的,则此单元变成活的。
所有其它死的单元在下一代仍然是死的。
5. 如果1个单元为活的,且有4个或者4个以上邻居单元是活的,则在下一代,此单元会因为拥塞而死亡。
6. 所有出生和死亡都刚好在同一时间发生,则此单元的死亡有助于另一个单元的出生,但它不能通过
减少拥塞而阻止其他单元的死亡;正在出生的单元也不能保护或者杀死上一代中活的单元。
依此规则进行迭代变化,使单元生生死死,会得到一些有趣的结果。该游戏之所以被称为“生命游戏”,
是因为其简单的游戏规则,反映了自然界中的生存规律:如果一个生命,其周围的同类生命太少的话,
会因为得不到帮助而死亡;如果太多,则会因为得不到足够的资源而死亡。
用计算机模拟这个“生命游戏”设定图像中的初始配置后依据上述的游戏规则演绎生命的变化,
由于初始状态和迭代次数不同,将会得到各种的优美图案。
本文在matlab下模拟了个“生命游戏”,不足之处由于初始状态随机设置,图案美观性欠缺…
matlab代码如下:
s=100; % 棋盘宽,棋盘是方的,即每行每列可以有100个元包自动机 w=8; % 每一个元包的像素宽度 board=zeros(w*s,s*w); %棋盘图片 state=zeros(s,s); %元包自动机的状态 newState=zeros(s,s); %% 初始化 for i=1:s for j=1:s if rand<0.4 % 随机在棋盘上以0.4的生存概率设置自动机状态 state(i,j)=1; % 其实分的随机设置状态会导致非常离散的点,最后收敛时棋盘上剩下些孤立的点 end end end figure; %% 更新状态 for k=1:1000 tmp=cputime; for i=1:s for j=1:s % 计算邻居着活着的个数 cnt=0; if i-1>0&&j-1>0 cnt=cnt+state(i-1,j-1); end if i-1>0&&j+1<=s cnt=cnt+state(i-1,j+1); end if i+1<=s&&j+1<=s cnt=cnt+state(i+1,j+1); end if i+1<=s&&j-1>0 cnt=cnt+state(i+1,j-1); end if j-1>0 cnt=cnt+state(i,j-1); end if j+1<=s cnt=cnt+state(i,j+1); end if i-1>0 cnt=cnt+state(i-1,j); end if i+1<=s cnt=cnt+state(i+1,j); end % 更新状态、着色 newState(i,j)=state(i,j); if state(i,j)==0 if cnt==3 newState(i,j)=1; end elseif state(i,j)==1 if cnt<2||cnt>3 newState(i,j)=0; end end if newState(i,j)==0 board(((i-1)*w+1):i*w,((j-1)*w+1):j*w)=0; else board(((i-1)*w+1):i*w,((j-1)*w+1):j*w)=255; end end end t=cputime-tmp; state=newState; imshow(board); pause(0.3); end
相关文章推荐
- 元胞自动机 生命游戏 Matlab实现 GUI
- MATLAB-元胞自动机-生命游戏-GUI
- matlab下整了个元宝自动机,俗称“生命游戏”
- "生命游戏",VB
- 假的生命游戏
- 详解Python 实现元胞自动机中的生命游戏(Game of life)
- 生命游戏
- 一个关于生命游戏的程序
- CocosCreator生命游戏
- 生命游戏
- 康威生命游戏 第一部分-基本功能实现(C++ & Windows SDK)
- MATLAB编写的猜字谜游戏
- 用javascript实现元胞自动机的生命游戏
- javascript小游戏--生命游戏
- Python,OpenGL生命游戏
- 忽然间对 生命的游戏 着了魔
- HTML5版本的生命游戏
- 生命游戏
- 用c语言演绎“生命游戏”
- “生命游戏”的多线程算法思考[转]