private void ValidateTileEmpty(SmallTileInformation tile)
 {
     if (tile.Value != TileValue.Empty)
     {
         throw new TileNotEmptyException();
     }
 }
Ejemplo n.º 2
0
        public void GetAllLinesOfBoard_ValidSmallTileInformation_ShouldReturnAllLines()
        {
            // arrange
            var board = new SmallTileInformation[3][];

            for (var x = 0; x < 3; x++)
            {
                board[x] = new SmallTileInformation[3];
                for (var y = 0; y < 3; y++)
                {
                    board[x][y] = new SmallTileInformation
                    {
                        BoardPosition = new Position(0, 0),
                        Value         = TileValue.Empty,
                    };
                }
            }

            // act
            IEnumerable <IEnumerable <TileInformation> > result =
                BoardExtensions.GetAllLinesOfBoard(board);

            // assert
            result.Should().HaveCount(8);
        }
        public MoveResult Move(Move m)
        {
            try
            {
                ValidateNoWinner();
                ValidateIsPlayersMove(m.Player);
                ValidateValidBoardToPlay(m.BoardPosition);

                SmallBoardInformation board = GetBoard(m.BoardPosition);
                SmallTileInformation  tile  = GetTile(board, m.TilePosition);

                ValidateTileEmpty(tile);

                tile.Value = m.Player.ToTileValue();

                Winner winner = board.Tiles.GetWinner(m.Player);
                if (winner != Winner.None)
                {
                    board.Value = winner.ToTileValue();
                    _winner     = _board.GetWinner(m.Player);
                }

                // if there is no exception until here the move was valid
                _moves.Add(m);
                ChangeCurrentPlayer();

                return(new MoveResult
                {
                    IsValid = true,
                    Move = m,
                    MoveFinishedBoard = winner != Winner.None,
                    MoveFinishedGame = _winner != Winner.None,
                });
            }
            catch (InvalidMoveException e)
            {
                return(new MoveResult
                {
                    IsValid = false,
                    Move = m,
                    MoveFinishedBoard = false,
                    MoveFinishedGame = false,
                    InvalidReason = e.Message,
                });
            }
        }
        private SmallTileInformation[][] GetEmptyBoard()
        {
            var emptyBoard = new SmallTileInformation[3][];

            for (var x = 0; x < 3; x++)
            {
                emptyBoard[x] = new SmallTileInformation[3];
                for (var y = 0; y < 3; y++)
                {
                    emptyBoard[x][y] = new SmallTileInformation
                    {
                        Value = TileValue.Empty,
                    };
                }
            }

            return(emptyBoard);
        }
        private SmallTileInformation[][] GenerateTiles(int boardX, int boardY)
        {
            var tiles = new SmallTileInformation[3][];

            for (var x = 0; x < 3; x++)
            {
                tiles[x] = new SmallTileInformation[3];
                for (var y = 0; y < 3; y++)
                {
                    tiles[x][y] = new SmallTileInformation
                    {
                        BoardPosition = new Position(boardX, boardY),
                        Value         = TileValue.Empty,
                    };
                }
            }

            return(tiles);
        }