您的位置:首页 > 编程语言 > MATLAB

元胞自动机 生命游戏 Matlab实现 GUI

2015-08-20 15:02 756 查看
clf
clear all
%build the GUI
%define the plot button
plotbutton=uicontrol('style','pushbutton',...
'string','Run',...
'fontsize',12,...
'position',[100,400,50,20],...
'callback','run=1;');

%define the stop button
erasebutton=uicontrol('style','pushbutton',...
'string','Stop',...
'fontsize',12,...
'position',[200,400,50,20],...
'callback','freeze=1;');

%define the Quit button
quitbutton=uicontrol('style','pushbutton',...
'string','Quit',...
'fontsize',12,...
'position',[300,400,50,20],...
'callback','stop=1;close;');

number=uicontrol('style','text',...
'string','1',...
'fontsize',12,...
'position',[20,400,50,20]);
%=================================================
%CA setup
n=128;
%initialize the arrays
z=zeros(n,n);
cells=z;
sum=z;
%set a few cells to one
cells(n/2,.25*n:.75*n)=1;
cells(.25*n:.75*n,n/2)=1;
cells=(rand(n,n))<.5;
%how long for each case to stability or simple oscillators

%build an image and display it
imh=image(cat(3,cells,z,z));
set(imh,'erasemode','none')
axis equal
axis tight

%index definition for cell update
x=2:n-1;
y=2:n-1;

%Main event loop
stop=0;%wait for a quit button push
run=0;%wait for a draw
freeze=0;%wait for a freeze

while(stop==0)
if(run==1)
%nearest neighbor sum
sum(x,y)=cells(x,y-1)+cells(x,y+1)+...
cells(x-1,y)+cells(x+1,y)+...
cells(x-1,y-1)+cells(x-1,y+1)+...
cells(3:n,y-1)+cells(x+1,y+1);
%The CA rule
cells=(sum==3)|(sum==2&cells);
%draw new image
set(imh,'cdata',cat(3,cells,z,z))
%update the step number display
stepnumber=1+str2num(get(number,'string'));
set(number,'string',num2str(stepnumber))
end

if(freeze==1)
run=0;
freeze=0;
end
drawnow   %need this in the loop for controls to work
end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: