public void Should_CreateRook()
        {
            // setup
            const ChessPosition POSITION = ChessPosition.A2;
            const ChessColor    COLOR    = ChessColor.White;

            // execute
            IPiece piece = _factory.CreateRook(POSITION, COLOR);

            // verify
            Assert.AreEqual(POSITION, piece.Location);
            Assert.AreEqual(COLOR, piece.Color);
        }
Ejemplo n.º 2
0
        public void Should_ReturnFalseForPawnMovedInLastFiftyMoves()
        {
            // setup
            IMoveHistory  history = ModelLocator.MoveHistory;
            IPiece        piece1  = _chessPieceFactory.CreateRook(ChessPosition.A2, ChessColor.White);
            IPlayerAction move1   = ModelLocator.Move;

            move1.StartingPosition = piece1.Location;
            move1.EndingPosition   = ChessPosition.A4;

            // verify empty list
            Assert.IsFalse(history.WasPawnMovedInLastFiftyMoves);


            // execute
            history.Add(piece1, move1);

            // verify
            Assert.IsFalse(history.WasPawnMovedInLastFiftyMoves);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Creates a piece with the same color and location as a promoted pawn.
        /// </summary>
        /// <param name="pieceType"></param>
        /// <param name="position"></param>
        /// <param name="color"></param>
        /// <returns></returns>
        /// <exception cref="PawnPromotionException"></exception>
        public IPiece PromotePawn(Type pieceType, ChessPosition position, ChessColor color)
        {
            bool isPieceTypeCorrect = pieceType == typeof(IQueen) ||
                                      pieceType == typeof(IRook) ||
                                      pieceType == typeof(IKnight) ||
                                      pieceType == typeof(IBishop);

            if (!isPieceTypeCorrect)
            {
                throw new PawnPromotionException(
                          $@"A pawn can only be promoted to a Queen, Knight, Rook or Bishop. {pieceType} is not a valid option.");
            }

            IChessPieceFactory factory = ModelLocator.ChessPieceFactory;

            if (pieceType == typeof(IQueen))
            {
                return(factory.CreateQueen(position, color));
            }

            if (pieceType == typeof(IRook))
            {
                return(factory.CreateRook(position, color));
            }

            if (pieceType == typeof(IBishop))
            {
                return(factory.CreateBishop(position, color));
            }

            if (pieceType == typeof(IKnight))
            {
                return(factory.CreateKnight(position, color));
            }

            throw new PawnPromotionException(@"A pawn can only be promoted to a Queen, Knight, Rook or Bishop.");
        }
Ejemplo n.º 4
0
        /// <summary>
        ///     Returns starting position pieces for the passed in color.
        /// </summary>
        /// <param name="color">Black or White</param>
        /// <returns></returns>
        public List <IPiece> CreateStartingPieces(ChessColor color)
        {
            IChessPieceFactory factory = ModelLocator.ChessPieceFactory;
            var pieces = new List <IPiece>();

            switch (color)
            {
            case ChessColor.White:
                // create pawns
                IPiece pawnA2 = factory.CreatePawn(ChessPosition.A2, color);
                IPiece pawnB2 = factory.CreatePawn(ChessPosition.B2, color);
                IPiece pawnC2 = factory.CreatePawn(ChessPosition.C2, color);
                IPiece pawnD2 = factory.CreatePawn(ChessPosition.D2, color);
                IPiece pawnE2 = factory.CreatePawn(ChessPosition.E2, color);
                IPiece pawnF2 = factory.CreatePawn(ChessPosition.F2, color);
                IPiece pawnG2 = factory.CreatePawn(ChessPosition.G2, color);
                IPiece pawnH2 = factory.CreatePawn(ChessPosition.H2, color);

                // create bigger pieces
                IPiece rookA1   = factory.CreateRook(ChessPosition.A1, color);
                IPiece knightB1 = factory.CreateKnight(ChessPosition.B1, color);
                IPiece bishopC1 = factory.CreateBishop(ChessPosition.C1, color);
                IPiece queenD1  = factory.CreateQueen(ChessPosition.D1, color);
                IPiece kingE1   = factory.CreateKing(ChessPosition.E1, color);
                IPiece bishopF1 = factory.CreateBishop(ChessPosition.F1, color);
                IPiece knightG1 = factory.CreateKnight(ChessPosition.G1, color);
                IPiece rookH1   = factory.CreateRook(ChessPosition.H1, color);

                // add pawns to dictionary
                pieces.Add(pawnA2);
                pieces.Add(pawnB2);
                pieces.Add(pawnC2);
                pieces.Add(pawnD2);
                pieces.Add(pawnE2);
                pieces.Add(pawnF2);
                pieces.Add(pawnG2);
                pieces.Add(pawnH2);

                // add bigger pieces to dictionary
                pieces.Add(rookA1);
                pieces.Add(knightB1);
                pieces.Add(bishopC1);
                pieces.Add(queenD1);
                pieces.Add(kingE1);
                pieces.Add(bishopF1);
                pieces.Add(knightG1);
                pieces.Add(rookH1);
                break;

            case ChessColor.Black:
                // create pawns
                IPiece pawnA7 = factory.CreatePawn(ChessPosition.A7, color);
                IPiece pawnB7 = factory.CreatePawn(ChessPosition.B7, color);
                IPiece pawnC7 = factory.CreatePawn(ChessPosition.C7, color);
                IPiece pawnD7 = factory.CreatePawn(ChessPosition.D7, color);
                IPiece pawnE7 = factory.CreatePawn(ChessPosition.E7, color);
                IPiece pawnF7 = factory.CreatePawn(ChessPosition.F7, color);
                IPiece pawnG7 = factory.CreatePawn(ChessPosition.G7, color);
                IPiece pawnH7 = factory.CreatePawn(ChessPosition.H7, color);

                // create bigger pieces
                IPiece rookA8   = factory.CreateRook(ChessPosition.A8, color);
                IPiece knightB8 = factory.CreateKnight(ChessPosition.B8, color);
                IPiece bishopC8 = factory.CreateBishop(ChessPosition.C8, color);
                IPiece queenD8  = factory.CreateQueen(ChessPosition.D8, color);
                IPiece kingE8   = factory.CreateKing(ChessPosition.E8, color);
                IPiece bishopF8 = factory.CreateBishop(ChessPosition.F8, color);
                IPiece knightG8 = factory.CreateKnight(ChessPosition.G8, color);
                IPiece rookH8   = factory.CreateRook(ChessPosition.H8, color);

                // add pawns to dictionary
                pieces.Add(pawnA7);
                pieces.Add(pawnB7);
                pieces.Add(pawnC7);
                pieces.Add(pawnD7);
                pieces.Add(pawnE7);
                pieces.Add(pawnF7);
                pieces.Add(pawnG7);
                pieces.Add(pawnH7);

                // add bigger pieces to dictionary
                pieces.Add(rookA8);
                pieces.Add(knightB8);
                pieces.Add(bishopC8);
                pieces.Add(queenD8);
                pieces.Add(kingE8);
                pieces.Add(bishopF8);
                pieces.Add(knightG8);
                pieces.Add(rookH8);
                break;
            }

            return(pieces);
        }