using System; using System.Collections.Generic; namespace TicTacToe { public class Game { public enum SquareState { Empty, X, O } private SquareState[,] board; public Game() { board = new SquareState[3, 3]; ResetBoard(); } public void ResetBoard() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { board[i, j] = SquareState.Empty; } } } public bool MakeMove(int x, int y, SquareState state) { if (board[x, y] == SquareState.Empty) { board[x, y] = state; return true; } else { return false; } } public SquareState GetState(int x, int y) { return board[x, y]; } public bool IsBoardFull() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (board[i, j] == SquareState.Empty) { return false; } } } return true; } public bool CheckForWinner() { // horizontal checks for (int i = 0; i < 3; i++) { if (board[i, 0] != SquareState.Empty && board[i, 0] == board[i, 1] && board[i, 0] == board[i, 2]) { return true; } } // vertical checks for (int i = 0; i < 3; i++) { if (board[0, i] != SquareState.Empty && board[0, i] == board[1, i] && board[0, i] == board[2, i]) { return true; } } // diagonal checks if (board[0, 0] != SquareState.Empty && board[0, 0] == board[1, 1] && board[0, 0] == board[2, 2]) { return true; } if (board[0, 2] != SquareState.Empty && board[0, 2] == board[1, 1] && board[0, 2] == board[2, 0]) { return true; } return false; } public List<(int, int)> GetAvailableMoves() { List<(int, int)> availableMoves = new List<(int, int)>(); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (board[i, j] == SquareState.Empty) { availableMoves.Add((i, j)); } } } return availableMoves; } } }