Advertisement
the_usik

Untitled

Apr 12th, 2022
884
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.09 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // Функция проверяет победителя для игрока player
  5. char check_winner(char board[3][3], char player) {
  6.     char winner = NULL;
  7.  
  8.     // проверка по горизонтали
  9.     for (int i = 0; i < 3; i++) {
  10.         if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
  11.             winner = player;
  12.         }
  13.     }
  14.  
  15.     if (winner != NULL) return winner;
  16.  
  17.     // проверка по вертикали
  18.     for (int i = 0; i < 3; i++) {
  19.         if (board[0][i] == player && board[1][i] == player && board[2][i] == player) {
  20.             winner = player;
  21.         }
  22.     }
  23.  
  24.     if (winner != NULL) return winner;
  25.  
  26.     // проверка по диагонали
  27.     for (int i = 0; i < 3; i++) {
  28.         if (board[0][0] == player && board[1][1] == player && board[2][2] == player) {
  29.             winner = player;
  30.         }
  31.     }
  32.  
  33.     if (winner != NULL) return winner;
  34.  
  35.     // проверка по обратной диагонали
  36.     for (int i = 0; i < 3; i++) {
  37.         if (board[0][2] == player && board[1][1] == player && board[2][0] == player) {
  38.             winner = player;
  39.         }
  40.     }
  41.  
  42.     // проверяем, есть ли свободные клетки
  43.     int cells = 0;
  44.  
  45.     for (int i = 0; i < 3; i++) {
  46.         for (int j = 0; j < 3; j++) {
  47.             if (board[i][j] == ' ') {
  48.                 cells = 1;
  49.                 break;
  50.             }
  51.         }
  52.     }
  53.  
  54.     // Если победитель не определился и кол-во свободных клеток равно 0, то ничья
  55.     if (winner == NULL && cells == 0) {
  56.         winner = 'T';
  57.     }
  58.  
  59.     return winner;
  60. }
  61.  
  62. int main() {
  63.     // Наша карта 3х3
  64.     char board[3][3] = {
  65.         ' ', ' ', ' ',
  66.         ' ', ' ', ' ',
  67.         ' ', ' ', ' '};
  68.  
  69.     // Переменная хранит текущего игрока (X или O)
  70.     char player = 'X';
  71.  
  72.     // Основной цикл игры
  73.     while (1) {
  74.         // Выводим сетку на экран
  75.         for (int i = 0; i < 3; i++) {
  76.             for (int j = 0; j < 3; j++) {
  77.                 if (board[i][j] == ' ') {
  78.                     printf("_");
  79.                 } else {
  80.                     printf("%c", board[i][j]);
  81.                 }
  82.             }
  83.             printf("\n");
  84.         }
  85.  
  86.         printf("Ходит %c. Введите числа по оси Х и Y\n", player);
  87.  
  88.         int row, col;
  89.  
  90.         // Читаем и проверяем данные из консоли (stdin)
  91.         if (scanf("%d", &row) != 1) {
  92.             printf("Неверный формат ввода по горизонтали\n");
  93.             fgetc(stdin);
  94.             continue;
  95.         }
  96.         if (scanf("%d", &col) != 1) {
  97.             printf("Неверный формат ввода по вертикали\n");
  98.             fgetc(stdin);
  99.             continue;
  100.         }
  101.  
  102.         if (row < 0 || row > 2 || col < 0 || col > 2) {
  103.             printf("Вы ввели некорректные координаты!\n");
  104.             fgetc(stdin);
  105.             continue;
  106.         }
  107.  
  108.         if (board[row][col] != ' ') {
  109.             printf("Неправильный ход!\n");
  110.             fgetc(stdin);
  111.             continue;
  112.         }
  113.  
  114.         // Проставляем знак в клетку
  115.         board[row][col] = player;
  116.  
  117.         // Проверяем победителя
  118.         char winner = check_winner(board, player);
  119.  
  120.         // Если победитель есть, то останавливаем игру и выводим победителя (или ничью)
  121.         if (winner != NULL) {
  122.             if (winner == 'T') {
  123.                 printf("Ничья!\n");
  124.             } else {
  125.                 printf("Победил %c!\n", winner);
  126.             }
  127.  
  128.             return 0;
  129.         }
  130.  
  131.         // Переход хода
  132.         if (player == 'X') {
  133.             player = 'O';
  134.         } else {
  135.             player = 'X';
  136.         }
  137.     }
  138.  
  139.     return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement