CellularAutomata元胞向量机-9-生命游戏MATLAB代码分享

该代码示例展示了如何使用MATLAB构建一个图形用户界面(GUI)来运行康威的生命游戏。用户可以启动、停止和退出游戏,观察元胞自动机的动态变化。初始设置包括128x128的网格,并随机初始化细胞状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主程序:

%%Conway's life with GUI

clf % 清除图形

clc, clear

%===========================

%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(.5*n-1,.5*n-1)=1;

%cells(.5*n-2,.5*n-2)=1;

%cells(.5*n-3,.5*n-3)=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 the new image

set(imh, 'cdata', cat(3,cells,z,z) )

%update the step number diaplay

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

子程序:game_of_life.m

%% 生命游戏GUI

clc

clear all

%构造三个按钮

plotbutton=uicontrol('style','pushbutton',...

'string','Run', ...

'fontsize',12, ...

'position',[100,400,50,20], ...

'callback', 'run=1;');

erasebutton=uicontrol('style','pushbutton',...

'string','Stop', ...

'fontsize',12, ...

'position',[200,400,50,20], ...

'callback','freeze=1;');

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]);

%元胞个数

n=128;

z = zeros(n,n);

cells = z;

sum = z;

%初始化一部分元胞有生命

cells(n/2,.25*n:.75*n) = 1;

cells(.25*n:.75*n,n/2) = 1;

cells = (rand(n,n))<.5 ;

%创建图片

imh = image(cat(3,cells,z,z));

set(imh, 'erasemode', 'none')

axis equal

axis tight

x = 2:n-1;

y = 2:n-1;

stop= 0;

run = 0;

freeze = 0;

while (stop==0)

if (run==1)

%周围活着的生命总数

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);

%元胞规则

cells = (sum==3) | (sum==2 & cells);

%更新图片

set(imh, 'cdata', cat(3,cells,z,z) )

%更新迭代了几步

stepnumber = 1 + str2num(get(number,'string'));

set(number,'string',num2str(stepnumber))

end

if (freeze==1)

run = 0;

freeze = 0;

end

pause(0.02)

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习不好的电气仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值