Saturday, October 17, 2015

Pascal: Игра жизнь, the Conwey's Game of Life


Исходный код:
  1. // the Conwey's Game of Life by Yulik
  2. uses
  3.   CRT;  {без него мы бы не увидели ничего на экране, всЄ бы быстро промелькнуло}
  4.  
  5. const
  6.   SizeX = 20; {константа, размер длины двумерного массива}
  7.   SizeY = 15;   {константа, размер высоты двумерного массива}
  8.  
  9. type
  10.   tField = array[0..SizeX-1,0..SizeX-1] of byte;  {тип}
  11.  
  12. var
  13.   F, G: tField;   {объ¤вление названи¤ двух массивов}
  14.  
  15. procedure Show(A: tField);  {процедура вывода массива на экран, массив ј, который мы не запоминаем}
  16. var
  17.   i, j: integer;    {локальные переменные}
  18. begin
  19.   for i:=0 to SizeX-1 do begin  {проходимс¤ по элементам строки}
  20.     for j:=0 to SizeY-1 do      {столбца}
  21.       write(a[i,j]);            {вывод на экран}
  22.     writeln;                    {переход на следующую строку}
  23.   end;
  24. end;
  25.  
  26.  
  27. procedure InRandom(var A: tField);   {процедура ввода элементов массива}
  28. var
  29.   i, j: integer;
  30. begin
  31.   for i:=0 to SizeX-1 do
  32.     for j:=0 to SizeY-1 do
  33.       a[i,j]:=random(2);           {случайные числа от 0 до 1}
  34. end;
  35.  
  36.  
  37. procedure Process(A: tField; var B: tField); {процедура процесса}
  38. var
  39.   i, j, s, ip : integer;
  40. begin
  41.   for i:=0 to sizeX-1 do begin
  42.     ip:= (i+1) mod SizeX;               {чтобы наш счетчик не уходил за границы, прибавим 1 и найдем остаток от делени¤ на длину массива}
  43.     for j:=0 to sizeY-1 do begin
  44.       s:= a[i,j+1]+a[i,j-1]+a[ip,j]+a[i-1,j]+a[ip,j+1]+a[i-1,j-1]+a[i-1,j+1]+a[ip,j-1];   {суммируем всех соседей клетки}
  45.       case s of
  46.         2: b[i,j]:=a[i,j];             {если 2 соседа, то оставл¤ем клетку как она есть}
  47.         3: b[i,j]:=1                   {если 3 - оживл¤ем клетку}
  48.         else b[i,j]:=0;                {иначе клетка погибает, то есть равна 0}
  49.       end;
  50.     end;
  51.   end;
  52. end;
  53.  
  54.  
  55. Begin
  56.   InRandom(F);           {формируетс¤ массив из случайных чисел 0 и 1}
  57.   while true do begin        {пока это правда, выводим на экран массив F }
  58.     Show(F);                  {F - исходный массив}
  59.     If ReadKey=#27 then break;  {приостановка времени, клавиша выхода esc}
  60.     Process(F,G);               {массивы F и G}
  61.     Show(G);                     {массив G - это новый получившийс¤ массив}
  62.     If ReadKey=#27 then break;
  63.     Process(G,F);               {массивы F и G мен¤ютс¤ местами}
  64.   end;
  65. end.

No comments:

Post a Comment