生命游戏

发布时间 : 星期五 文章生命游戏更新完毕开始阅读

生命游戏 (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 \ '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);

联系合同范文客服:xxxxx#qq.com(#替换为@)