internal Board GetBoardAfterFirstKingCastlingMove(MovingFigure king) { var nextBoardState = new Board(Fen); nextBoardState.SetFigureAt(king.From, Figure.None); nextBoardState.SetFigureAt(king.To, king.Figure); nextBoardState.GenerateNextFen(); return(nextBoardState); }
private void UpdateCastlingData(MovingFigure mf) { var targetColor = mf.Figure.GetColor(); var currentCastlingFenPart = (targetColor == Color.White) ? WhiteCastlingFenPart : BlackCastlingFenPart; if (string.IsNullOrWhiteSpace(currentCastlingFenPart)) { return; } switch (mf.Figure) { case (Figure.BlackRook): { if (mf.From.X == 7) { BlackCastlingFenPart = (BlackCastlingFenPart.Contains('q')) ? "q" : ""; } else if (mf.From.X == 0) { BlackCastlingFenPart = (BlackCastlingFenPart.Contains('k')) ? "k" : ""; } break; } case (Figure.WhiteRook): { if (mf.From.X == 7) { WhiteCastlingFenPart = (WhiteCastlingFenPart.Contains('Q')) ? "Q" : ""; } else if (mf.From.X == 0) { WhiteCastlingFenPart = (WhiteCastlingFenPart.Contains('K')) ? "K" : ""; } break; } case (Figure.WhiteKing): { WhiteCastlingFenPart = string.Empty; break; } case (Figure.BlackKing): { BlackCastlingFenPart = string.Empty; break; } } }
public Board Move(MovingFigure mf) { var nextBoardState = new Board(Fen); nextBoardState.SetFigureAt(mf.From, Figure.None); nextBoardState.SetFigureAt(mf.To, mf.Promotion == Figure.None ? mf.Figure : mf.Promotion); if (MoveColor == Color.Black) { nextBoardState.MoveNumber = MoveNumber + 1; } nextBoardState.MoveColor = MoveColor.FlipColor(); nextBoardState.UpdateCastlingData(mf); nextBoardState.GenerateNextFen(); return(nextBoardState); }
public bool IsCheckTo() { Square targetKingPosition = FindTargetKingPosition(); var move = new Move(this); MovingFigure currentMovingFigure; foreach (var figureOnSquare in YieldFigures()) { currentMovingFigure = new MovingFigure(figureOnSquare, targetKingPosition); if (move.CanMove(currentMovingFigure)) { return(true); } } return(false); }
public Board Castle(MovingFigure king, MovingFigure rook) { var nextBoardState = new Board(Fen); nextBoardState.SetFigureAt(king.From, Figure.None); nextBoardState.SetFigureAt(king.To, king.Figure); nextBoardState.SetFigureAt(rook.From, Figure.None); nextBoardState.SetFigureAt(rook.To, rook.Figure); if (MoveColor == Color.Black) { nextBoardState.MoveNumber = MoveNumber + 1; } nextBoardState.MoveColor = MoveColor.FlipColor(); nextBoardState.UpdateCastlingData(king); nextBoardState.GenerateNextFen(); return(nextBoardState); }
public bool IsCheckAfterMove(MovingFigure movingFigure) { var after = Move(movingFigure); return(after.IsCheckTo()); }