% kiegészítés: http://www.math.com/students/wonders/life/life.html (érdekes
% rész: Do All Patterns Stabilize Eventually?)
% http://www.ibiblio.org/lifepatterns/ ->innen van az előbbi oldal applete
% (lehet bele rajzolni)
% http://www.bitstorm.org/gameoflife/lexicon/
% http://en.wikipedia.org/wiki/Conway's_Game_of_Life

function ca2d(init,deltat,T)
% init: 0-1 mátrix, a 2D sejtautomata kezdeti állapota
% deltat: ábrázolásnál az egyes iterációk között mennyi ideig álljon a kép
% T: iterációk száma

if nargin < 3
    T = 50;
end
if nargin < 2
    deltat = 0.03;
end
if nargin < 1
    init =  [               zeros(2,5)
                zeros(1,1)  ones(1,3)  zeros(1,1)
                           zeros(2,5)            ];
end

% hogy legyen szomszédja a szélső celláknak is
x = [               zeros( 1,size(init,2)+2 )
     zeros( size(init,1),1 )  init  zeros( size(init,1),1 )
                    zeros( 1,size(init,2)+2 )               ];
xng = x;
colormap(gray(2));
image(~x(2:end-1,2:end-1)*8);
for t = 1:T
    title(sprintf('%d(/%d). iteárció',t-1,T)) 
    if deltat ~= 0
        pause(deltat)
    else
        xlabel('Nyomj egy egy gombot a következő iterációhoz!')
        waitforbuttonpress;
    end
    % következő generáció kiszámolása:
    for i = 2:size(x,1)-1
        for j = 2:size(x,2)-1
            n = sum(sum( x( i-1:i+1 , j-1:j+1 ) ));
            if x(i,j)   % x(i,j)==1
                if n-1 > 3
                    xng(i,j)=0; % túlnépesedés
                elseif n-1<2
                    xng(i,j)=0; % túl kicsi a populáció
                end     % else ág nincs, mert akkor marad xng(i,j)=1
            else    % x(i,j)==0
                if n==3
                    xng(i,j)=1; % növekvő populáció
                end
            end     
        end
    end
    x = xng;
    image(~x(2:end-1,2:end-1)*8);
end
title(sprintf('%d(/%d). iteárció',T,T))
xlabel('Vége')
