Advertisement
leomovskii

Game.cs

Sep 30th, 2022
641
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.09 KB | Source Code | 0 0
  1. using UnityEngine;
  2.  
  3. // Клас менеджера гри
  4. public class Game : MonoBehaviour {
  5.  
  6.     // Колір пустої клітини
  7.     public Color emptyCellColor = Color.white;
  8.     // Колір гравця О
  9.     public Color playerColorO = Color.red;
  10.     // Колір гравця Х
  11.     public Color playerColorX = Color.blue;
  12.  
  13.     // Змінна inGame керує статусом гри
  14.     bool inGame = true;
  15.     // Змінна isTurnO визначає, котрий гравець ходить зараз
  16.     bool isTurnO = true;
  17.     // Массив, де зберігаються посилання на всі клітини поля
  18.     Cell[,] board = new Cell[3,3];
  19.  
  20.     // Гра чекає, коли гравець натисне на кнопку R
  21.     void Update() {
  22.         if (Input.GetKeyDown(KeyCode.R)) {
  23.             ResetGame();
  24.         }
  25.     }
  26.  
  27.     // Метод ResetGame скидує гру на початок
  28.     void ResetGame() {
  29.         for (int x = 0; x < 3; x++) {
  30.             for (int y = 0; y < 3; y++) {
  31.                 board[x,y].Set(0, emptyCellColor);
  32.                 inGame = true;
  33.                 isTurnO = true;
  34.             }
  35.         }
  36.     }
  37.  
  38.     // За допомогою методу Add ми додаємо клітину до поля
  39.     public void Add(Cell cell) {
  40.         board[cell.x, cell.y] = cell;
  41.     }
  42.  
  43.     // Метод Click натискає на клітині поля
  44.     public void Click(Cell cell) {
  45.         // Якщо ми у грі та натиснута клітина пуста
  46.         if (inGame && board[cell.x,cell.y].number == 0) {
  47.             // Якщо ходить гравець О
  48.             if (isTurnO) {
  49.                 // Ставим його відмітку
  50.                 board[cell.x,cell.y].Set(1, playerColorO);
  51.             // Якщо ходить гравець Х
  52.             } else {
  53.                 // Ставим його відмітку
  54.                 board[cell.x,cell.y].Set(-1, playerColorX);
  55.             }
  56.             // Запускаємо перевірку гри
  57.             CheckGame();
  58.         }
  59.     }
  60.  
  61.     // Метод CheckGame перевіряє, прийшов кінець раунду, чи ні
  62.     void CheckGame() {
  63.         // Робимо суми всіх ліній з трьох елементів
  64.         int[] sums = new int[8];
  65.         // Горизонтальні
  66.         sums[0] = board[0,0].number + board[1,0].number + board[2,0].number;
  67.         sums[1] = board[0,1].number + board[1,1].number + board[2,1].number;
  68.         sums[2] = board[0,2].number + board[1,2].number + board[2,2].number;
  69.         // Вертикальні
  70.         sums[3] = board[0,0].number + board[0,1].number + board[0,2].number;
  71.         sums[4] = board[1,0].number + board[1,1].number + board[1,2].number;
  72.         sums[5] = board[2,0].number + board[2,1].number + board[2,2].number;
  73.         // Діагональні
  74.         sums[6] = board[0,0].number + board[1,1].number + board[2,2].number;
  75.         sums[7] = board[0,2].number + board[1,1].number + board[2,0].number;
  76.         // Для кожної лініх перевіряємо:
  77.         for (int i = 0; i < 8; i++) {
  78.             // Чи переміг гравець О
  79.             if (sums[i] == 3) {
  80.                 Debug.Log("Переміг гравець О");
  81.                 // Зупиняємо гру
  82.                 inGame = false;
  83.                 return;
  84.             // Чи переміг гравець Х
  85.             } else if (sums[i] == -3) {
  86.                 Debug.Log("Переміг гравець Х");
  87.                 // Зупиняємо гру
  88.                 inGame = false;
  89.                 return;
  90.             }
  91.         }
  92.         // Якщо на цьому ході жоден гравець не переміг
  93.         // Знаходимо хоча б одну пусту клітину на полі
  94.  
  95.         // Знайшли пусту клітину
  96.         if (HasZeros()) {
  97.             // Перемикаємо ход на іншого гравця
  98.             isTurnO = !isTurnO;
  99.             // І виводимо у консоль
  100.             if (isTurnO) {
  101.                 Debug.Log("Ход гравця O");
  102.             } else {
  103.                 Debug.Log("Ход гравця X");
  104.             }
  105.         // Пуста клітина не знайдена
  106.         } else {
  107.             Debug.Log("Нічия");   
  108.             // Зупиняємо гру
  109.             inGame = false;
  110.         }
  111.     }
  112.  
  113.     // Метод HasZeros шукає пусту клітину
  114.     bool HasZeros() {
  115.         for (int x = 0; x < 3; x++) {
  116.             for (int y = 0; y < 3; y++) {
  117.                 if (board[x,y].number == 0) {
  118.                     return true;
  119.                 }
  120.             }
  121.         }
  122.         return false;
  123.     }
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement