« 上一篇: 4阶变步长龙格-库塔法解dy=fun(x,y)型方程 下一篇: 各种EraseMode方式的意义 zz »
萝卜 @ 2005-07-14 13:45

     生命游戏 (Came of Life)是J. H. Conway在20世纪60年代末设计的一种单人玩的计算机游戏(Garclner,M.,1970、1971)。他与现代的围棋游戏在某些特征上略有相似:围棋中有黑白两种棋子。生命游戏中的元胞有{"生","死"}两个状态 {0,1};围棋的棋盘是规则划分的网格,黑白两子在空间的分布决定双方的死活,而生命游戏也是规则划分的网格(元胞似国际象棋分布在网格内。而不象围棋的棋子分布在格网交叉点上)。根据元胞的局部空间构形来决定生死。只不过规则更为简单。下面介绍生命游戏的构成及规则:
(1)元胞分布在规则划分的网格上;
(2)元胞具有0,1两种状态,0代表"死",l代表"生";
(3)元胞以相邻的8个元胞为邻居。即Moore邻居形式;
(4)一个元胞的生死由其在该时刻本身的生死状态和周围八个邻居的状态 (确切讲是状态的和)决定:
·在当前时刻,如果一个元胞状态为"生",且八个相邻元胞中有两个或三个的状态为"生",则在下--时刻该元胞继续保持为"生",否则"死"去;
·在当前时刻。如果一个元胞状态为"死"。且八个相邻元胞中正好有三个为"生"。则该元胞在下一时刻 "复活"。否则保持为"死"。
尽管它的规则看上去很简单。但生命游戏是具有产生动态图案和动态结构能力的元胞自动机模型。它能产生丰富的、有趣的图案。生命游戏的优化与初始元胞状态值的分布有关,给定任意的初始状态分布。经过若干步的运算,有的图案会很快消失。而有的图案则固定不动,有的周而复始重复两个或几个图案,有的婉蜒而行。有的则保持图案定向移动,形似阅兵阵……,其中最为著名的是"滑翔机 (叫Glider)"的图案。

matlab程序如下:
% 其中黑点表示活着
% 白点表示死亡状态

function Game_of_Life(n)
% 生命游戏
% Example:
%   Game_of_Life(100);
if nargin==0;
   n=100;
end
B=round(rand(n+2));
Z=B(2:end-1,2:end-1);
H=imshow(Z,[]);
set(gcf,'position',[241 132 560 420])
set(gcf,'doublebuffer','on');
xlabel('Please press "space" key and stop this program!',...
 'fontsize',12,'color','r');
k=1;
title('Game of life','color','b');
while k;
  s=get(gcf,'currentkey');
  if strcmp(s,'space');
      clc;k=0;
  end
  A=sumfun(B);
  X=zeros(n);
  X(Z==1 & (A==2 | A==3))=1;
  X(Z==0 & A==3)=1;
  B(2:end-1,2:end-1)=X;
  Z=X;
  set(H,'CData',1-X);
  pause(0.5);
end
figure(gcf);
function S=sumfun(B);
% 周围8个位置的和
S=B(1:end-2,2:end-1)+...
   B(3:end,2:end-1)+...
   B(2:end-1,1:end-2)+...
   B(2:end-1,3:end)+...
   B(2:end-1,1:end-2)+...
   B(1:end-2,3:end)+...
   B(3:end,1:end-2)+...
   B(3:end,3:end);

最新评论


bigfee

2005-07-31 11:14 网址: http://boofee.net/bigfee

做个链接吧~:)
http://boofee.net/bigfee


2005-08-01 15:35 网址: http://pjy2929.ycool.com/

zjliu,是不是回家了?最近没有看到你更新。我是motor.



zjliu

2005-08-01 21:15

我已经回来了!刚来,现在没有新的idea,所以没更新



东城胜主

2005-12-13 10:40

看了你的东东,对我帮助很大。拜读了你的这个程序后,我个人认为你的sumfun函数好像有点问题,我改成
S=B(1:end-2,2:end-1)+...
  B(3:end,2:end-1)+...
  B(1:end-2,3:end)+...
  B(2:end-1,3:end)+...
  B(2:end-1,1:end-2)+...
  B(1:end-2,3:end)+...
  B(3:end,1:end-2)+...
  B(3:end,3:end);
希望与你一起切磋一下。



王冠

2006-03-11 15:57

我也编过一个生命游戏的matlab程序
不过比这个差很多
我想让我的学生也编一个
如果编不出就让他们解释‘萝卜先生’的程序。专为教学用,希望‘萝卜先生’允许我这么做。谢谢



luobo

2006-03-11 16:02

可以的,但是我想主意个人版权的尊重就行了.这个程序我觉得还可以增加其它的条件以便让它更有意思,这个是可以考虑的



hujianbing

2008-02-13 17:02 匿名 124.72.*.* 网址: http://hu4939.blog.163.com/

我以为函数sumfun()中有一个语句应该纠正(四楼“东城”改的也不对)为:
B(1:end-2,1:end-2)+...
即完整的表达式是:
S=B(1:end-2,2:end-1)+...
 B(3:end,2:end-1)+...
 B(1:end-2,3:end)+...
 B(2:end-1,3:end)+...
 B(2:end-1,1:end-2)+...
 B(1:end-2,1:end-2)+...
 B(3:end,1:end-2)+...
 B(3:end,3:end);



爪爪予

2008-04-22 17:05 匿名 218.65.*.*

想请教一下,怎么把元胞自动机和函数优化联系起来编程啊?一点思路都没有哦


2008-06-21 15:22

thanks


评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定