public void Move(Position origin, Position destination) { var originBox = this[origin]; var destinationBox = this[destination]; if (destinationBox.Piece != null) { CapturedPieceCollection.AddEntry(destinationBox.Piece); } destinationBox.Piece = originBox.Piece; originBox.Piece = null; if (destinationBox.Piece is King) { UpdateKingPosition(destinationBox); } BeginPieceRecapturingIfPawnReachedTheEnd(destinationBox); if (!RetakingIsActive) { NextTurn(); } // TODO: Maybe Handle history here }
public ChessboardClassic() { InitializeBoxCollection(); CapturedPieceCollection = new CapturedPieceCollection(); NewGame(); }
public void NewGame() { SetChessboardBoxesAsUnavailable(); CapturedPieceCollection.Clear(); ClearPieces(); AddWhitePieces(); AddBlackPieces(); CurrentTurn = PieceColor.White; PositionWhiteKing = new Position(1, 5); PositionBlackKing = new Position(8, 4); }
// TODO: Refactor arguments public void RetakePiece(Position position, ChessPiece chessPiece) { var entries = CapturedPieceCollection.GetEntryCount(chessPiece); if (entries == 0) { // TODO: Maybe send notification return; } var box = this[position]; box.Piece = chessPiece; CapturedPieceCollection.DecrementEntry(chessPiece); NextTurn(); RetakingIsActive = false; }
// TODO: Refactor private void BeginPieceRecapturingIfPawnReachedTheEnd(Box destinationBox) { if (destinationBox.Position.Row == 8 && destinationBox.Piece is Pawn && destinationBox.Piece.Color == PieceColor.White) { if (CapturedPieceCollection.GetCountTotalCapturedPieces(PieceColor.White, typesToExclude: typeof(Pawn)) > 0) { RetakingIsActive = true; RetakingPosition = destinationBox.Position; } } else if (destinationBox.Position.Row == 1 && destinationBox.Piece is Pawn && destinationBox.Piece.Color == PieceColor.Black) { if (CapturedPieceCollection.GetCountTotalCapturedPieces(PieceColor.Black, typesToExclude: typeof(Pawn)) > 0) { RetakingIsActive = true; RetakingPosition = destinationBox.Position; } } }