% kiegeszites: http://www.math.com/students/wonders/life/life.html (erdekes
% resz: Do All Patterns Stabilize Eventually?)
% http://www.ibiblio.org/lifepatterns/ ->innen van az elobbi 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 matrix, a 2D sejtautomata kezdeti allapota
% deltat: abrazolasnal az egyes iteraciok kozott mennyi ideig alljon a kep
% T: iteraciok szama
stop=0;
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

hFig = figure('CloseRequestFcn',{@closeHandler});

% hogy legyen szomszedja a szelso cellaknak 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). iterarcio',t-1,T)) 
    if deltat ~= 0
        pause(deltat)
    else
        xlabel('Nyomj egy egy gombot a kovetkezo iteraciohoz!')
        waitforbuttonpress;
    end
    % kovetkezo generacio kiszamol�asa:
    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; % tulnepesedes
                elseif n-1<2
                    xng(i,j)=0; % tul kicsi a populacio
                end     % else �g nincs, mert akkor marad xng(i,j)=1
            else    % x(i,j)==0
                if n==3
                    xng(i,j)=1; % novekvo populacio
                end
            end     
        end
    end
    x = xng;
    if stop
        break;
    end
    
    image(~x(2:end-1,2:end-1)*8);
end

if ~stop
    title(sprintf('%d(/%d). itearcio',T,T))
    xlabel('Vege')
end

function closeHandler (src,evnt)
      delete(hFig);
      stop=1;
   end
end
