public ConsoleGameBuilder(IConsoleUI ui) : base(ui)
        {
            ui.DisplayStartScreen();
            bool startGame = false;

            while (startGame == false)
            {
                startGame = ui.DisplayReadyScreen();
            }
            List <IGamePlayer> players = ui.DisplayEnterPlayersScreen();
            NoughtCrossToken   token   = ui.DisplayEnterPlayerOneTokenScreen();

            IGameSquare[][] squares = new GameSquare[3][];
            for (int i = 0; i < 3; i++)
            {
                squares[i] = new GameSquare[3];
                for (int j = 0; j < 3; j++)
                {
                    squares[i][j] = new GameSquare();
                }
            }
            IGameBoard board = new GameBoard(squares);

            _gameEngine = new GameEngine(players, board, players[0].Id, token, new GameVictoryCalculator(GameWinStates.GetStates()));
        }
Beispiel #2
0
        private GameSquare[,] FormatGameState(IGameSquare[][] gameState, NoughtCrossToken token)
        {
            var maxLength = 0;

            for (int i = 0; i < 3; i++)
            {
                if (gameState[i].Length > maxLength)
                {
                    maxLength = gameState[i].Length;
                }
            }

            var formattedGameState = new GameSquare[gameState.Length, maxLength];

            for (int i = 0; i < gameState.Length; i++)
            {
                for (int j = 0; j < gameState[i].Length; j++)
                {
                    formattedGameState[i, j] = new GameSquare();
                    if (gameState[i][j].Value == token)
                    {
                        formattedGameState[i, j].Value = NoughtCrossToken.X;
                    }
                }
                for (int j = gameState[i].Length; j < maxLength; j++)
                {
                    formattedGameState[i, j] = new GameSquare();
                }
            }

            return(formattedGameState);
        }
Beispiel #3
0
        public void ThrowErrorOnAlreadySetBoardSquare()
        {
            int x = 0;
            int y = 0;
            NoughtCrossToken value = NoughtCrossToken.X;

            _board = new GameBoard(_squares);
            _board.SetSquare(x, y, value);
            value = NoughtCrossToken.O;
            _board.SetSquare(x, y, value);
        }
Beispiel #4
0
        public void SetAndGetBoardSquare2by0()
        {
            int x = 2;
            int y = 0;
            NoughtCrossToken value = NoughtCrossToken.X;

            _board = new GameBoard(_squares);
            _board.SetSquare(x, y, value);
            var setValue = _board.GetSquare(x, y);

            Assert.AreEqual(value, setValue);
        }
 public void SetSquare(int x, int y, NoughtCrossToken value)
 {
     try
     {
         _squares[x][y].Value = value;
     }
     catch (Exception e)
     {
         if (e.GetType() == typeof(InvalidOperationException))
         {
             throw new InvalidOperationException("Cannot set square: " + e.Message);
         }
     }
 }
Beispiel #6
0
 public GameEngine(List <IGamePlayer> players, IGameBoard board, Guid playerOneId, NoughtCrossToken playerOneToken, IGameVictoryCalculator victoryCalculator) : base(players, board, playerOneId, playerOneToken)
 {
     _victoryCalculator = victoryCalculator;
 }
        public BaseGameEngine(List <IGamePlayer> players, IGameBoard board, Guid playerOneId, NoughtCrossToken playerOneToken)
        {
            _players = players;
            _board   = board;
            if (_players.Count != 2)
            {
                throw new ArgumentException("Invalid number of players");
            }

            if (board.GetBoard().Length != 3 ||
                board.GetBoard()[0].Length != 3 ||
                board.GetBoard()[1].Length != 3 ||
                board.GetBoard()[2].Length != 3)
            {
                throw new ArgumentException("Invalid board size");
            }

            if (_players.Find(e => e.Id == playerOneId) == null)
            {
                throw new ArgumentException("Player One not present");
            }

            foreach (var player in _players)
            {
                if (player.Id == playerOneId)
                {
                    player.SetPlayerToken(playerOneToken);
                }
                else
                {
                    if (playerOneToken == NoughtCrossToken.X)
                    {
                        player.SetPlayerToken(NoughtCrossToken.O);
                    }
                    else
                    {
                        player.SetPlayerToken(NoughtCrossToken.X);
                    }
                }
            }

            _gameTurn   = 0;
            _winner     = null;
            _playerTurn = playerOneId;
        }