Advertisement
Guest User

ttt

a guest
Dec 16th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.95 KB | None | 0 0
  1. program tic_tac_toe;
  2.  
  3. type
  4.     Field = array [1..7,1..7] of String;
  5.     Cells = array [1..9] of Integer;
  6.  
  7. var
  8.     gameField : Field;
  9.     gameCells : Cells;
  10.     player : String;
  11.     i, j, stepsCount, choice : Integer;
  12.     isEnded, legalChoice : Boolean;
  13.  
  14. procedure createField(var field: Field);
  15.     begin
  16.         field[1,1] := '╔';
  17.         field[1,2] := '═';
  18.         field[1,3] := '╦';
  19.         field[1,4] := '═';
  20.         field[1,5] := '╦';
  21.         field[1,6] := '═';
  22.         field[1,7] := '╗';
  23.  
  24.         field[2,1] := '║';
  25.         field[2,2] := ' ';
  26.         field[2,3] := '║';
  27.         field[2,4] := ' ';
  28.         field[2,5] := '║';
  29.         field[2,6] := ' ';
  30.         field[2,7] := '║';
  31.  
  32.         field[3,1] := '╠';
  33.         field[3,2] := '═';
  34.         field[3,3] := '╬';
  35.         field[3,4] := '═';
  36.         field[3,5] := '╬';
  37.         field[3,6] := '═';
  38.         field[3,7] := '╣';
  39.  
  40.         field[4,1] := '║';
  41.         field[4,2] := ' ';
  42.         field[4,3] := '║';
  43.         field[4,4] := ' ';
  44.         field[4,5] := '║';
  45.         field[4,6] := ' ';
  46.         field[4,7] := '║';
  47.  
  48.         field[5,1] := '╠';
  49.         field[5,2] := '═';
  50.         field[5,3] := '╬';
  51.         field[5,4] := '═';
  52.         field[5,5] := '╬';
  53.         field[5,6] := '═';
  54.         field[5,7] := '╣';
  55.  
  56.         field[6,1] := '║';
  57.         field[6,2] := ' ';
  58.         field[6,3] := '║';
  59.         field[6,4] := ' ';
  60.         field[6,5] := '║';
  61.         field[6,6] := ' ';
  62.         field[6,7] := '║';
  63.  
  64.         field[7,1] := '╚';
  65.         field[7,2] := '═';
  66.         field[7,3] := '╩';
  67.         field[7,4] := '═';
  68.         field[7,5] := '╩';
  69.         field[7,6] := '═';
  70.         field[7,7] := '╝';
  71.     end;
  72.  
  73. procedure writeField(field: Field);
  74.     var i, j: Integer;
  75.  
  76.     begin
  77.         for i := 1 to 7 do
  78.         begin
  79.             for j := 1 to 7 do
  80.                 write(field[i,j]);
  81.             writeln;
  82.         end;
  83.     end;
  84.  
  85. procedure makeTurn(var field: Field; var cells: Cells; player: String; cell: Integer);
  86.     var i, j: Integer;
  87.         row, column: Integer;
  88.  
  89.     begin
  90.         if player = 'X' then
  91.             cells[cell] := 1
  92.         else
  93.             cells[cell] := 2;
  94.        
  95.         row := (cell div 3) + 1;
  96.         column := cell mod 3;
  97.  
  98.         if column = 0 then
  99.             begin
  100.                 column := 3;
  101.                 row := row - 1;
  102.             end;
  103.  
  104.         field[row * 2, column * 2] := player;
  105.     end;
  106.  
  107. function checkWin(cells: Cells; player: String): Boolean;
  108.     begin
  109.         checkWin := False;
  110.         if (cells[1] = cells[4]) and (cells[4] = cells[7]) and (cells[1] <> 0) then
  111.             checkWin := True;
  112.         if (cells[2] = cells[5]) and (cells[5] = cells[8]) and (cells[2] <> 0) then
  113.             checkWin := True;
  114.         if (cells[3] = cells[6]) and (cells[6] = cells[9]) and (cells[3] <> 0) then
  115.             checkWin := True;
  116.         if (cells[1] = cells[2]) and (cells[2] = cells[3]) and (cells[1] <> 0) then
  117.             checkWin := True;
  118.         if (cells[4] = cells[5]) and (cells[5] = cells[6]) and (cells[4] <> 0) then
  119.             checkWin := True;
  120.         if (cells[7] = cells[8]) and (cells[8] = cells[9]) and (cells[7] <> 0) then
  121.             checkWin := True;
  122.         if (cells[1] = cells[5]) and (cells[5] = cells[9]) and (cells[1] <> 0) then
  123.             checkWin := True;
  124.         if (cells[3] = cells[5]) and (cells[5] = cells[7]) and (cells[3] <> 0) then
  125.             checkWin := True;
  126.         if checkWin then
  127.             writeln('Победил ', player);
  128.     end;
  129.  
  130.  
  131. begin
  132.  
  133. createField(gameField);
  134. writeField(gameField);
  135.  
  136. player := 'X';
  137. stepsCount := 0;
  138. isEnded := False;
  139. legalChoice := False;
  140.  
  141. while isEnded = False do
  142.     begin
  143.         writeln('Ходит ', player);
  144.        
  145.         while legalChoice = False do
  146.             begin
  147.                 write('Выбирете клетку: ');
  148.                 readln(choice);
  149.  
  150.                 if (choice <= 0) or (choice >= 10) then
  151.                     writeln('Клетки ', choice, ' не существует. Попробуйте еще раз.')
  152.                 else
  153.                     legalChoice := true;
  154.  
  155.                 if legalChoice then
  156.                     if gameCells[choice] <> 0 then
  157.                         begin
  158.                             writeln('Клетка ', choice, ' занята. Попробуйте еще раз.');
  159.                             legalChoice := False;
  160.                         end;
  161.            
  162.             end;
  163.  
  164.         makeTurn(gameField, gameCells, player, choice);
  165.         writeField(gameField);
  166.         stepsCount := stepsCount + 1;
  167.  
  168.         if (checkWin(gameCells, player) = true) or (stepsCount = 9) then
  169.             isEnded := True;
  170.            
  171.  
  172.         if player = 'X' then
  173.             player := 'O'
  174.         else
  175.             player := 'X';
  176.        
  177.         choice := 0;
  178.         legalChoice := False;
  179.     end;
  180.  
  181. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement