Bohmirov

TIC-TAC-TOE

Jan 26th, 2021
569
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int check(int n, int *a[]) {
  5.     //проверка по горизонтали
  6.     for (int i = 0; i < n; i++)
  7.     {
  8.         bool flag = true;
  9.         for (int j = 0; j < n; j++)
  10.             if (a[i][j] != a[i][0])
  11.             {
  12.                 flag = false;
  13.                 break;
  14.             }
  15.  
  16.         if (flag && a[i][0] != 0)
  17.             return a[i][0];
  18.     }
  19.  
  20.     //проверка по вертикали
  21.     for (int i = 0; i < n; i++)
  22.     {
  23.         bool flag = true;
  24.         for (int j = 0; j < n; j++)
  25.             if (a[j][i] != a[0][i])
  26.             {
  27.                 flag = false;
  28.                 break;
  29.             }
  30.  
  31.         if (flag && a[0][i] != 0)
  32.             return a[0][i];
  33.     }
  34.  
  35.  
  36.     //проверка по главной диагонали
  37.     bool flag = true;
  38.     for (int i = 0; i < n; i++)
  39.         if (a[i][i] != a[0][0])
  40.         {
  41.             flag = false;
  42.             break;
  43.         }
  44.    
  45.     if (flag && a[0][0] != 0)
  46.         return a[0][0];
  47.  
  48.     //проверка по побочной диагонали
  49.     flag = true;
  50.     for (int i = 0; i < n; i++)
  51.         if (a[i][n - i - 1] != a[0][n - 1])
  52.         {
  53.             flag = false;
  54.             break;
  55.         }
  56.  
  57.     if (flag && a[0][n - 1] != 0)
  58.         return a[0][n - 1];
  59.  
  60.     int c = 0;
  61.     for (int i = 0; i < n; i++)
  62.         for (int j = 0; j < n; j++)
  63.             if (a[i][j] == 0)
  64.                 c++;
  65.     if (c == 0)
  66.         return -1;
  67.     return 0;
  68. }
  69.  
  70. int main()
  71. {
  72.     system("CLS");
  73.     setlocale(LC_ALL, "Russian");
  74.  
  75.     int n = 3;
  76.     int** game_field = new int* [n];
  77.     for (int i = 0; i < n; i++)
  78.         game_field[i] = new int[n];
  79.     for (int i = 0; i < n; i++)
  80.         for (int j = 0; j < n; j++)
  81.             game_field[i][j] = 0;
  82.  
  83.     int next_turn = 1;
  84.     while (true)
  85.     {
  86.         for (int i = 0; i < n; i++)
  87.         {
  88.             for (int j = 0; j < n; j++)
  89.                 switch (game_field[i][j])
  90.                 {
  91.                 case 0:
  92.                     cout << ".";
  93.                     break;
  94.                 case 1:
  95.                     cout << "x";
  96.                     break;
  97.                 case 2:
  98.                     cout << "o";
  99.                     break;
  100.                 }
  101.             cout << endl;
  102.         }
  103.  
  104.         if (check(n, game_field) == -1)
  105.         {
  106.             cout << endl << "Ничья" << endl;
  107.             break;
  108.         }
  109.  
  110.         if (check(n, game_field) != 0)
  111.         {
  112.             cout << endl << "Победил игрок " << check(n, game_field) << endl;
  113.             break;
  114.         }
  115.  
  116.         int x, y;
  117.         cout << endl;
  118.         cout << "Ходите - введите координаты по вертикали и горизонтали" << endl;
  119.         cout << "(координаты первой ячейки - 0 0)" << endl;
  120.         cout << "(ходит " << ((next_turn == 1) ? "x" : "o") << ")" << endl;
  121.         cin >> y >> x;
  122.         if (0 <= x && x < n && 0 <= y && y < n)
  123.             if (game_field[y][x] == 0)
  124.             {
  125.                 game_field[y][x] = next_turn;
  126.                 next_turn = (next_turn == 1) ? 2 : 1;
  127.             }
  128.         system("CLS");
  129.     }
  130.  
  131.     system("pause");
  132.     return 0;
  133. }
  134.  
RAW Paste Data