Exemplo n.º 1
0
        public GameStatus GetStatusFrom(CrossesBoard board)
        {
            foreach (var winningRow in _winningRows)
            {
                if (winningRow.All(position => board.TokenAt(position) == GameToken.Player1))
                {
                    return(GameStatus.Player1Wins);
                }

                if (winningRow.All(position => board.TokenAt(position) == GameToken.Player2))
                {
                    return(GameStatus.Player2Wins);
                }
            }

            if (!EmptySpacesExist(board))
            {
                return(GameStatus.Draw);
            }

            return(GameStatus.Ongoing);
        }
Exemplo n.º 2
0
        private static bool EmptySpacesExist(CrossesBoard board)
        {
            for (int rowIndex = 0; rowIndex < CrossesBoard.BOARD_SIZE; rowIndex++)
            {
                for (int columnIndex = 0; columnIndex < CrossesBoard.BOARD_SIZE; columnIndex++)
                {
                    if (board.TokenAt(BoardPosition.At(columnIndex, rowIndex)) == GameToken.None)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Exemplo n.º 3
0
        public static string ToString(CrossesBoard board)
        {
            const string TOP_LINE         = "  ┌───┬───┬───┐";
            const string HORIZONTAL_LINE  = "  ├───┼───┼───┤";
            const string VERTICAL_SECTION = "│";
            const string BOTTOM_LINE      = "  └───┴───┴───┘";
            const string NEWLINE          = "\r\n";

            Dictionary <GameToken, string> displayToken = new Dictionary <GameToken, string> {
                { GameToken.Player1, "X" },
                { GameToken.Player2, "O" },
                { GameToken.None, " " },
            };

            var output = new StringBuilder(NEWLINE);

            output.AppendLine("    0   1   2");
            output.AppendLine(TOP_LINE);

            for (int rows = 0; rows < CrossesBoard.BOARD_SIZE; rows++)
            {
                output.Append(rows + " ");
                for (int columns = 0; columns < CrossesBoard.BOARD_SIZE; columns++)
                {
                    output.Append(VERTICAL_SECTION + " ");
                    output.Append(displayToken[board.TokenAt(new BoardPosition(columns, rows))] + " ");
                }

                output.AppendLine(VERTICAL_SECTION);

                if (rows < CrossesBoard.BOARD_SIZE - 1)
                {
                    output.AppendLine(HORIZONTAL_LINE);
                }
            }

            output.AppendLine(BOTTOM_LINE);

            return(output.ToString());
        }