begin comment Game of Life; integer array table[0:2,0:2]; procedure initialisetable (table, M,N); integer array table; integer M,N; begin integer i,j; for i:=0 step 1 until (M-1) do for j:=0 step 1 until (N-1) do begin if (i != j) then table[i,j]:= 0 else table[i,j]:=1; end end; procedure printtable (table,M,N); integer array table; integer M,N; begin integer i,j; for i:=0 step 1 until M-1 do begin for j:=0 step 1 until N-1 do begin outinteger(1, table[i,j]); end; outstring(1, "\n") end end; procedure applyRules (table, M,N); integer array table; integer M,N; begin integer Neighbours,actual,i,j; integer array prevGen[0:2,0:2]; copytable(prevGen,table,M,N); for i:=0 step 1 until M-1 do begin for j:=0 step 1 until N-1 do begin actual := prevGen[i,j]; countNeighboursAlive (prevGen,M,N,i,j,Neighbours); if (actual = 1) then begin if (Neighbours < 2) then table[i,j]:=0 else if (Neighbours <= 3) then table[i,j]:=1 else table[i,j]:=0; end else if (Neighbours = 3) then table[i,j]:=1; end; end end; procedure countNeighboursAlive (table, M,N, x,y, Neighbours); value M,N,x,y; integer array table; integer M,N,x,y,Neighbours; begin boolean isNeighbour; integer i,j; Neighbours := 0; for i:=(x-1) step 1 until (x+1) do begin for j:=(y-1) step 1 until (y+1) do begin isNeighbour := ( (i>=0) and (j>=0) and (i<M) and (j<N) and ( (x != i) or (y != j) ) ); if isNeighbour then begin if (table[i,j] = 1) then Neighbours := Neighbours +1 end end; end end; procedure copytable (prevGen,table,M,N); begin integer i,j; for i:=0 step 1 until (M-1) do for j:=0 step 1 until (N-1) do prevGen[i,j]:= table[i,j]; end; initialisetable(table,3,3); printtable(table,3,3); applyRules(table,3,3); printtable(table,3,3); end