Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- // Клас менеджера гри
- public class Game : MonoBehaviour {
- // Колір пустої клітини
- public Color emptyCellColor = Color.white;
- // Колір гравця О
- public Color playerColorO = Color.red;
- // Колір гравця Х
- public Color playerColorX = Color.blue;
- // Змінна inGame керує статусом гри
- bool inGame = true;
- // Змінна isTurnO визначає, котрий гравець ходить зараз
- bool isTurnO = true;
- // Массив, де зберігаються посилання на всі клітини поля
- Cell[,] board = new Cell[3,3];
- // Гра чекає, коли гравець натисне на кнопку R
- void Update() {
- if (Input.GetKeyDown(KeyCode.R)) {
- ResetGame();
- }
- }
- // Метод ResetGame скидує гру на початок
- void ResetGame() {
- for (int x = 0; x < 3; x++) {
- for (int y = 0; y < 3; y++) {
- board[x,y].Set(0, emptyCellColor);
- inGame = true;
- isTurnO = true;
- }
- }
- }
- // За допомогою методу Add ми додаємо клітину до поля
- public void Add(Cell cell) {
- board[cell.x, cell.y] = cell;
- }
- // Метод Click натискає на клітині поля
- public void Click(Cell cell) {
- // Якщо ми у грі та натиснута клітина пуста
- if (inGame && board[cell.x,cell.y].number == 0) {
- // Якщо ходить гравець О
- if (isTurnO) {
- // Ставим його відмітку
- board[cell.x,cell.y].Set(1, playerColorO);
- // Якщо ходить гравець Х
- } else {
- // Ставим його відмітку
- board[cell.x,cell.y].Set(-1, playerColorX);
- }
- // Запускаємо перевірку гри
- CheckGame();
- }
- }
- // Метод CheckGame перевіряє, прийшов кінець раунду, чи ні
- void CheckGame() {
- // Робимо суми всіх ліній з трьох елементів
- int[] sums = new int[8];
- // Горизонтальні
- sums[0] = board[0,0].number + board[1,0].number + board[2,0].number;
- sums[1] = board[0,1].number + board[1,1].number + board[2,1].number;
- sums[2] = board[0,2].number + board[1,2].number + board[2,2].number;
- // Вертикальні
- sums[3] = board[0,0].number + board[0,1].number + board[0,2].number;
- sums[4] = board[1,0].number + board[1,1].number + board[1,2].number;
- sums[5] = board[2,0].number + board[2,1].number + board[2,2].number;
- // Діагональні
- sums[6] = board[0,0].number + board[1,1].number + board[2,2].number;
- sums[7] = board[0,2].number + board[1,1].number + board[2,0].number;
- // Для кожної лініх перевіряємо:
- for (int i = 0; i < 8; i++) {
- // Чи переміг гравець О
- if (sums[i] == 3) {
- Debug.Log("Переміг гравець О");
- // Зупиняємо гру
- inGame = false;
- return;
- // Чи переміг гравець Х
- } else if (sums[i] == -3) {
- Debug.Log("Переміг гравець Х");
- // Зупиняємо гру
- inGame = false;
- return;
- }
- }
- // Якщо на цьому ході жоден гравець не переміг
- // Знаходимо хоча б одну пусту клітину на полі
- // Знайшли пусту клітину
- if (HasZeros()) {
- // Перемикаємо ход на іншого гравця
- isTurnO = !isTurnO;
- // І виводимо у консоль
- if (isTurnO) {
- Debug.Log("Ход гравця O");
- } else {
- Debug.Log("Ход гравця X");
- }
- // Пуста клітина не знайдена
- } else {
- Debug.Log("Нічия");
- // Зупиняємо гру
- inGame = false;
- }
- }
- // Метод HasZeros шукає пусту клітину
- bool HasZeros() {
- for (int x = 0; x < 3; x++) {
- for (int y = 0; y < 3; y++) {
- if (board[x,y].number == 0) {
- return true;
- }
- }
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement