public bool CheckVertical(Sign sign) { int vertical = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (Map[j, i] == sign) { vertical++; } } if (vertical == 3) { return(true); } else { vertical = 0; } } return(false); }
public bool CheckHorizontal(Sign x) { int horizontal = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (Map[i, j] == x) { horizontal++; } } if (horizontal == 3) { return(true); } else { horizontal = 0; } } return(false); }
public Field(Coord x, Coord y, Sign sign) { X = x; Y = y; Sign = sign; }
public bool CheckBottomLeftToTopRightDiagonal(Sign sign) { return((Map[2, 0] == sign) && (Map[1, 1] == sign) && (Map[0, 2] == sign)); }
public bool CheckDiagonals(Sign sign) { return(CheckTopLeftToBottomRightDiagonal(sign) || CheckBottomLeftToTopRightDiagonal(sign)); }
public bool CheckTopLeftToBottomRightDiagonal(Sign sign) { return((Map[0, 0] == sign) && (Map[1, 1] == sign) && (Map[2, 2] == sign)); }
public int Minimax(List <Block> blocks, Sign currentPlayer, Sign oppositePlayer, int alpha, int beta, bool isMax, int currentPlay) { int score = EvaluateBoard(blocks, currentPlayer, oppositePlayer, currentPlay); if (score == 10 - currentPlay) { return(10 - currentPlay); } if (score == -10 + currentPlay) { return(-10 + currentPlay); } if (!IsEmptyBlock(blocks)) { return(0); } if (isMax) { int best = MIN; for (int i = 0; i < blocks.Count; i++) { if (blocks[i].sign == Sign.Empty) { blocks[i].sign = currentPlayer; currentPlay++; int value = Minimax(blocks, currentPlayer, oppositePlayer, alpha, beta, !isMax, currentPlay); blocks[i].sign = Sign.Empty; best = Mathf.Max(best, value); alpha = Math.Max(alpha, best); if (beta <= alpha) { break; } } } return(best); } else { int best = MAX; for (int i = 0; i < blocks.Count; i++) { if (blocks[i].sign == Sign.Empty) { blocks[i].sign = oppositePlayer; currentPlay++; int value = Minimax(blocks, currentPlayer, oppositePlayer, alpha, beta, !isMax, currentPlay); blocks[i].sign = Sign.Empty; best = Math.Min(best, value); beta = Math.Min(beta, best); if (beta <= alpha) { break; } } } return(best); } }
public Bot(Sign sign) : base(sign) { _random = new Random(); }
public HumanPlayer(Sign sign) : base(sign) { }
private void ToggleNextSign() => _nextSign = _nextSign == Sign.X ? Sign.O : Sign.X;
public TicTacToe() { _board = new Board(); _gameOverRule = new GameOverRule(); _nextSign = Sign.X; }