Example #1
0
        /// <summary>
        ///     Generates all legal <see cref="IPawn" /> moves
        /// </summary>
        /// <param name="boardState"></param>
        public override void GenerateMoves(IBoardState boardState)
        {
            IChessPieceMover cpm = ModelLocator.ChessPieceMover;

            MoveSet.Clear();
            ChessPosition oneSpaceFromLocation = Color == ChessColor.White ? cpm.North(Location) : cpm.South(Location);
            bool          oneSpaceMoveIsLegal  = !boardState.Contains(oneSpaceFromLocation);

            if (oneSpaceMoveIsLegal)
            {
                MoveSet.Add(oneSpaceFromLocation);
            }
            else
            {
                return;
            }

            ChessPosition twoSpaceFromLocation = Color == ChessColor.White
                ? cpm.North(oneSpaceFromLocation)
                : cpm.South(oneSpaceFromLocation);
            bool twoSpaceMoveIsLegal = !boardState.Contains(twoSpaceFromLocation);

            if (!HasMoved && twoSpaceMoveIsLegal)
            {
                MoveSet.Add(Color == ChessColor.White
                    ? cpm.North(cpm.North(Location))
                    : cpm.South(cpm.South(Location)));
            }
        }
Example #2
0
        /// <summary>
        ///     Will update whether the Pawn is able to be promoted or captured via En Passant.
        /// </summary>
        /// <param name="position"></param>
        public override void MoveTo(ChessPosition position)
        {
            if (!HasMoved)
            {
                IChessPieceMover cpm = ModelLocator.ChessPieceMover;
                bool             moveIsTwoForward = Color == ChessColor.White
                    ? position == cpm.North(cpm.North(Location))
                    : position == cpm.South(cpm.South(Location));

                IsCapturableByEnPassant = moveIsTwoForward;
            }
            else
            {
                IsCapturableByEnPassant = false;
            }

            base.MoveTo(position);

            ChessPosition promotionRank = Color == ChessColor.White ? ChessPosition.Rank8 : ChessPosition.Rank1;

            if ((position & promotionRank) == position)
            {
                IsPromotable = true;
            }
        }
Example #3
0
        private ChessPosition GenerateCaptureWest(IBoardState enemyPieces, IChessPieceMover cpm)
        {
            ChessPosition potentialCapture =
                Color == ChessColor.White ? cpm.NorthWest(Location) : cpm.SouthWest(Location);
            bool isPieceAtCaptureLocation = enemyPieces.Contains(potentialCapture);

            return(isPieceAtCaptureLocation ? potentialCapture : ChessPosition.None);
        }
Example #4
0
        private void GenerateSouthSouthWestMove(IBoardState boardState, IChessPieceMover cpm)
        {
            ChessPosition move = cpm.South(cpm.SouthWest(Location));

            if (!boardState.Contains(move))
            {
                MoveSet.Add(move);
            }
        }
Example #5
0
        private void GenerateEastNorthEastMove(IBoardState boardState, IChessPieceMover cpm)
        {
            ChessPosition move = cpm.East(cpm.NorthEast(Location));

            if (!boardState.Contains(move))
            {
                MoveSet.Add(move);
            }
        }
Example #6
0
        private void GenerateEastMoves(IBoardState boardState, IChessPieceMover cpm)
        {
            ChessPosition nextMove = cpm.East(Location);

            if (!boardState.Contains(nextMove))
            {
                MoveSet.Add(nextMove);
            }
        }
Example #7
0
        public override void GenerateThreatened(IBoardState boardState, IBoardState owningPlayerBoardState)
        {
            IChessPieceMover cpm = ModelLocator.ChessPieceMover;

            ThreatenSet.Clear();

            ThreatenSet.Add(GenerateThreatenedEast(cpm));
            ThreatenSet.Add(GenerateThreatenedWest(cpm));
        }
Example #8
0
        public ChessPosition GetLocationOfPieceBeingCaptured(IPiece capturingPiece, ICapture capture)
        {
            IChessPieceMover cpm = ModelLocator.ChessPieceMover;
            // get the position of the piece we're trying to capture via En Passant
            ChessPosition locationOfPotentiallyCapturedPiece = capturingPiece.Color == ChessColor.White
                ? cpm.South(capture.EndingPosition)
                : cpm.North(capture.EndingPosition);

            return(locationOfPotentiallyCapturedPiece);
        }
Example #9
0
        /// <summary>
        ///     Generates all legal <see cref="IPawn" /> captures
        /// </summary>
        /// <param name="boardState">Current board state</param>
        /// <param name="owningPlayerBoardState">State of all of the moving color's pieces</param>
        public override void GenerateCaptures(IBoardState boardState, IBoardState owningPlayerBoardState)
        {
            IChessPieceMover cpm = ModelLocator.ChessPieceMover;

            CaptureSet.Clear();

            IBoardState enemyPieces = CreateEnemyBoardState(boardState, owningPlayerBoardState);

            CaptureSet.Add(GenerateCaptureEast(enemyPieces, cpm));
            CaptureSet.Add(GenerateCaptureWest(enemyPieces, cpm));
        }
Example #10
0
        /// <summary>
        ///     Generates all legal <see cref="Rook" /> moves
        /// </summary>
        /// <param name="boardState"></param>
        public override void GenerateMoves(IBoardState boardState)
        {
            IChessPieceMover cpm = ModelLocator.ChessPieceMover;

            MoveSet.Clear();

            GenerateNorthMoves(boardState, cpm);
            GenerateSouthMoves(boardState, cpm);
            GenerateEastMoves(boardState, cpm);
            GenerateWestMoves(boardState, cpm);
        }
Example #11
0
        /// <summary>
        ///     Generates all legal <see cref="Rook" /> captures
        /// </summary>
        /// <param name="boardState"></param>
        /// <param name="owningPlayerBoardState"></param>
        public override void GenerateCaptures(IBoardState boardState, IBoardState owningPlayerBoardState)
        {
            IChessPieceMover cpm = ModelLocator.ChessPieceMover;

            CaptureSet.Clear();
            IBoardState enemyBoardState = CreateEnemyBoardState(boardState, owningPlayerBoardState);

            GenerateNorthCaptures(owningPlayerBoardState, enemyBoardState, cpm);
            GenerateSouthCaptures(owningPlayerBoardState, enemyBoardState, cpm);
            GenerateEastCaptures(owningPlayerBoardState, enemyBoardState, cpm);
            GenerateWestCaptures(owningPlayerBoardState, enemyBoardState, cpm);
        }
Example #12
0
        /// <summary>
        ///     Executes En Passant capture. Does not check legality.
        /// </summary>
        /// <param name="capture"></param>
        /// <returns></returns>
        private int ExecuteEnPassantCapture(ICapture capture)
        {
            IChessPieceMover cpm         = ModelLocator.ChessPieceMover;
            IPiece           movingPiece = GetPiece(ActivePlayerColor, capture.StartingPosition);

            ChessPosition locationOfLostPiece
                = ModelLocator.EnPassantHelper.GetLocationOfPieceBeingCaptured(movingPiece, capture);

            IPiece lostPiece = GetPiece(InactivePlayerColor, locationOfLostPiece);

            UpdateBoardForEnPassant(movingPiece as IPawn, capture, lostPiece as IPawn);

            return(lostPiece.Value);
        }
Example #13
0
 private void GenerateSouthWestCaptures(IBoardState owningPlayerBoardState, IBoardState enemyBoardState,
                                        IChessPieceMover cpm)
 {
     GenerateDirectionalCaptures(owningPlayerBoardState, enemyBoardState, cpm.SouthWest);
 }
Example #14
0
 private void GenerateWestMoves(IBoardState boardState, IChessPieceMover cpm)
 {
     GenerateDirectionalMoves(boardState, cpm.West);
 }
Example #15
0
 private void GenerateNorthCaptures(IBoardState owningPlayerBoardState, IBoardState enemyBoardState,
                                    IChessPieceMover cpm)
 {
     GenerateDirectionalCaptures(owningPlayerBoardState, enemyBoardState, cpm.North);
 }
Example #16
0
 private void GenerateNorthMoves(IBoardState boardState, IChessPieceMover cpm)
 {
     GenerateDirectionalMoves(boardState, cpm.North);
 }
Example #17
0
        private void GenerateWestSouthWestCapture(IBoardState enemyBoardState, IChessPieceMover cpm)
        {
            ChessPosition capture = cpm.West(cpm.SouthWest(Location));

            AddCaptureToCaptureSet(capture, enemyBoardState);
        }
Example #18
0
 private ChessPosition GenerateThreatenedWest(IChessPieceMover cpm)
 {
     return(Color == ChessColor.White ? cpm.NorthWest(Location) : cpm.SouthWest(Location));
 }
Example #19
0
        private void GenerateNorthEastCaptures(IBoardState enemyBoardState, IChessPieceMover cpm)
        {
            ChessPosition capture = cpm.NorthEast(Location);

            AddCaptureToCaptureSet(capture, enemyBoardState);
        }