/// <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))); } }
/// <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; } }
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); }
private void GenerateSouthSouthWestMove(IBoardState boardState, IChessPieceMover cpm) { ChessPosition move = cpm.South(cpm.SouthWest(Location)); if (!boardState.Contains(move)) { MoveSet.Add(move); } }
private void GenerateEastNorthEastMove(IBoardState boardState, IChessPieceMover cpm) { ChessPosition move = cpm.East(cpm.NorthEast(Location)); if (!boardState.Contains(move)) { MoveSet.Add(move); } }
private void GenerateEastMoves(IBoardState boardState, IChessPieceMover cpm) { ChessPosition nextMove = cpm.East(Location); if (!boardState.Contains(nextMove)) { MoveSet.Add(nextMove); } }
public override void GenerateThreatened(IBoardState boardState, IBoardState owningPlayerBoardState) { IChessPieceMover cpm = ModelLocator.ChessPieceMover; ThreatenSet.Clear(); ThreatenSet.Add(GenerateThreatenedEast(cpm)); ThreatenSet.Add(GenerateThreatenedWest(cpm)); }
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); }
/// <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)); }
/// <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); }
/// <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); }
/// <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); }
private void GenerateSouthWestCaptures(IBoardState owningPlayerBoardState, IBoardState enemyBoardState, IChessPieceMover cpm) { GenerateDirectionalCaptures(owningPlayerBoardState, enemyBoardState, cpm.SouthWest); }
private void GenerateWestMoves(IBoardState boardState, IChessPieceMover cpm) { GenerateDirectionalMoves(boardState, cpm.West); }
private void GenerateNorthCaptures(IBoardState owningPlayerBoardState, IBoardState enemyBoardState, IChessPieceMover cpm) { GenerateDirectionalCaptures(owningPlayerBoardState, enemyBoardState, cpm.North); }
private void GenerateNorthMoves(IBoardState boardState, IChessPieceMover cpm) { GenerateDirectionalMoves(boardState, cpm.North); }
private void GenerateWestSouthWestCapture(IBoardState enemyBoardState, IChessPieceMover cpm) { ChessPosition capture = cpm.West(cpm.SouthWest(Location)); AddCaptureToCaptureSet(capture, enemyBoardState); }
private ChessPosition GenerateThreatenedWest(IChessPieceMover cpm) { return(Color == ChessColor.White ? cpm.NorthWest(Location) : cpm.SouthWest(Location)); }
private void GenerateNorthEastCaptures(IBoardState enemyBoardState, IChessPieceMover cpm) { ChessPosition capture = cpm.NorthEast(Location); AddCaptureToCaptureSet(capture, enemyBoardState); }