public sealed override void MovePiece(int originRow, int originColumn, int targetRow, int targetColumn) { var origin = RemovePiece(originRow, originColumn); var target = RemovePiece(targetRow, targetColumn); var specialMove = false; var pawnsDoubleStepForward = false; var incomingPromotion = false; if (origin is Pawn) { if (Math.Abs(originRow - targetRow) == 2) // First move, Double-step-forward { EnPassantVulnerable = origin as Pawn; pawnsDoubleStepForward = true; } else if (target is null && Math.Abs(originColumn - targetColumn) == 1) // En passant { RemovePiece(EnPassantVulnerable); CapturedPieces.Add(EnPassantVulnerable); } else if (origin.Side == BoardSide.Bottom && targetRow == 0 || origin.Side == BoardSide.Top && targetRow == Rows - 1) // Promotion { incomingPromotion = true; } }
private GamePiece PerformMove(Position origin, Position destiny) { GamePiece piece = Board.RemovePiece(origin); piece.IncrementNumberOfMovements(); GamePiece capturedPiece = Board.RemovePiece(destiny); Board.PlacePiece(piece, destiny); if (capturedPiece != null) { CapturedPieces.Add(capturedPiece); } // SPECIAL MOVES: // Lesser Castling if (piece is King && destiny.Column == origin.Column + 2) { Position rookOrigin = new Position(origin.Row, origin.Column + 3); Position rookDestiny = new Position(origin.Row, origin.Column + 1); GamePiece rook = Board.RemovePiece(rookOrigin); rook.IncrementNumberOfMovements(); Board.PlacePiece(rook, rookDestiny); } // Greater Castling if (piece is King && destiny.Column == origin.Column - 2) { Position rookOrigin = new Position(origin.Row, origin.Column - 4); Position rookDestiny = new Position(origin.Row, origin.Column - 1); GamePiece rook = Board.RemovePiece(rookOrigin); rook.IncrementNumberOfMovements(); Board.PlacePiece(rook, rookDestiny); } // En Passent if (piece is Pawn) { if (destiny.Column != origin.Column && capturedPiece == null) { Position targetPawnPosition; if (piece.Color == Color.White) { targetPawnPosition = new Position(destiny.Row + 1, destiny.Column); } else { targetPawnPosition = new Position(destiny.Row - 1, destiny.Column); } capturedPiece = Board.RemovePiece(targetPawnPosition); CapturedPieces.Add(capturedPiece); } } return(capturedPiece); }
private Piece MakeMove(Position source, Position target) { ChessPiece sourcePiece = (ChessPiece)Board.RemovePiece(source); sourcePiece.IncreaseMoveCount(); Piece capturedPiece = Board.RemovePiece(target); Board.PlacePiece(sourcePiece, target); if (capturedPiece != null) { PiecesOnTheBoard.Remove(capturedPiece); CapturedPieces.Add(capturedPiece); } //SpecialMove Castling KingSide Rook if (sourcePiece is King && target.Column == source.Column + 2) { Position sourceRook = new Position(source.Row, source.Column + 3); Position targetRook = new Position(source.Row, source.Column + 1); ChessPiece rook = (ChessPiece)Board.RemovePiece(sourceRook); Board.PlacePiece(rook, targetRook); rook.IncreaseMoveCount(); } //SpecialMove Castling QueenSide Rook if (sourcePiece is King && target.Column == source.Column - 2) { Position sourceRook = new Position(source.Row, source.Column - 4); Position targetRook = new Position(source.Row, source.Column - 1); ChessPiece rook = (ChessPiece)Board.RemovePiece(sourceRook); Board.PlacePiece(rook, targetRook); rook.IncreaseMoveCount(); } //SpecialMove EnPassant if (sourcePiece is Pawn) { if (source.Column != target.Column && capturedPiece == null) { Position pawnPosition; if (sourcePiece.Color == Color.White) { pawnPosition = new Position(target.Row + 1, target.Column); } else { pawnPosition = new Position(target.Row - 1, target.Column); } capturedPiece = Board.RemovePiece(pawnPosition); CapturedPieces.Add(capturedPiece); PiecesOnTheBoard.Remove(capturedPiece); } } return(capturedPiece); }
public Piece ExecuteMovement(Position origin, Position destiny) { Piece piece = Board.RemovePiece(origin); piece.IncrementMovementQuantity(); Piece capturedPiece = Board.RemovePiece(destiny); Board.PlacePiece(piece, destiny); if (capturedPiece != null) { CapturedPieces.Add(capturedPiece); } // #SpecialMove Short Castling if (piece is King && destiny.Column == origin.Column + 2) { Position originTower = new Position(origin.Row, origin.Column + 3); Position destinyTower = new Position(origin.Row, origin.Column + 1); Piece tower = Board.RemovePiece(originTower); tower.IncrementMovementQuantity(); Board.PlacePiece(tower, destinyTower); } // #SpecialMove Long Castling if (piece is King && destiny.Column == origin.Column - 2) { Position originTower = new Position(origin.Row, origin.Column - 4); Position destinyTower = new Position(origin.Row, origin.Column - 1); Piece tower = Board.RemovePiece(originTower); tower.IncrementMovementQuantity(); Board.PlacePiece(tower, destinyTower); } // #Special Move en Passant if (piece is Pawn) { if (origin.Column != destiny.Column && capturedPiece == null) { Position pawnPosition; if (piece.Color == Color.White) { pawnPosition = new Position(destiny.Row + 1, destiny.Column); } else { pawnPosition = new Position(destiny.Row - 1, destiny.Column); } capturedPiece = Board.RemovePiece(pawnPosition); CapturedPieces.Add(capturedPiece); } } return(capturedPiece); }
public Piece ChessMove(Position origin, Position destiny) { Piece movedPiece = Board.RemovePiece(origin); movedPiece.IncreaseQtyMovement(); Piece takenPiece = Board.RemovePiece(destiny); Board.AddressPiece(movedPiece, destiny); if (takenPiece != null) { CapturedPieces.Add(takenPiece); } //Special move: Castling ////Short Castling if (movedPiece is King && destiny.Column == origin.Column + 2) { Position rookOrigin = new Position(origin.Line, origin.Column + 3); Position rookDestiny = new Position(origin.Line, origin.Column + 1); Piece movedRook = Board.RemovePiece(rookOrigin); movedRook.IncreaseQtyMovement(); Board.AddressPiece(movedRook, rookDestiny); } ////Long Castling if (movedPiece is King && destiny.Column == origin.Column - 2) { Position rookOrigin = new Position(origin.Line, origin.Column - 4); Position rookDestiny = new Position(origin.Line, origin.Column - 1); Piece movedRook = Board.RemovePiece(rookOrigin); movedRook.IncreaseQtyMovement(); Board.AddressPiece(movedRook, rookDestiny); } //Special move: En passant if (movedPiece is Pawn) { if (origin.Column != destiny.Column) { Position EnPassantCapture; if (movedPiece.Color == Color.White) { EnPassantCapture = new Position(destiny.Line + 1, destiny.Column); } else { EnPassantCapture = new Position(destiny.Line - 1, destiny.Column); } takenPiece = Board.RemovePiece(EnPassantCapture); CapturedPieces.Add(takenPiece); } } return(takenPiece); }
public Piece RunMoviment(Position origin, Position destiny) { Piece p = ChessBoard.RemovePiece(origin); p.IncrementQnttMovies(); Piece CapturedPiece = ChessBoard.RemovePiece(destiny); ChessBoard.InsertPiece(p, destiny); if (CapturedPiece != null) { CapturedPieces.Add(CapturedPiece); } //#jogada especial roque pequeno if (p is King && destiny.Column == origin.Column + 2) { Position originT = new Position(origin.Line, origin.Column + 3); Position destinyT = new Position(origin.Line, origin.Column + 1); Piece T = ChessBoard.RemovePiece(originT); T.IncrementQnttMovies(); ChessBoard.InsertPiece(T, destinyT); } //#jogada especial roque Grande if (p is King && destiny.Column == origin.Column - 2) { Position originT = new Position(origin.Line, origin.Column - 4); Position destinyT = new Position(origin.Line, origin.Column - 1); Piece T = ChessBoard.RemovePiece(originT); T.IncrementQnttMovies(); ChessBoard.InsertPiece(T, destinyT); } //#jogada especial EnPassant if (p is Pawn) { if (origin.Column != destiny.Column && CapturedPiece == null) { Position posP; if (p.Color == Color.Branca) { posP = new Position(destiny.Line + 1, destiny.Column); } else { posP = new Position(destiny.Line - 1, destiny.Column); } CapturedPiece = ChessBoard.RemovePiece(posP); CapturedPieces.Add(CapturedPiece); } } return(CapturedPiece); }
public Piece ExecuteMove(Position from, Position to) { Piece p = Board.RemovePiece(from); p.SumQntMoves(); Piece capturedPiece = Board.RemovePiece(to); Board.PutPiece(p, to); if (capturedPiece != null) { CapturedPieces.Add(capturedPiece); } return(capturedPiece); }
/// <summary> /// Execute move of chess piece /// </summary> /// <param name="origin">Origin of piece</param> /// <param name="target">Target position</param> public Piece ExecuteMove(Position origin, Position target) { Piece piece = Board.RemovePiece(origin); Piece capturedPiece = Board.RemovePiece(target); Board.PutPiece(piece, target); // Log StringBuilder text = new StringBuilder(); text.AppendLine("Move piece"); text.AppendLine(string.Concat("Piece: ", piece.GetType())); text.AppendLine(string.Concat("Color: ", piece.Color.ToString())); text.AppendLine(string.Concat("Origin ChessPosition: ", origin.ToChessPosition().ToString(), " Origin CanvasPosition(Column, Row): ", origin.Column, ", ", origin.Row)); text.AppendLine(string.Concat("Target ChessPosition: ", target.ToChessPosition().ToString(), " Target CanvasPosition(Column, Row): ", target.Column, ", ", target.Row)); text.AppendLine(string.Concat("Turn: ", TotalMoves)); text.AppendLine(string.Concat("Date: ", DateTime.Now.ToShortDateString(), " Time: ", DateTime.Now.ToShortTimeString())); piece.IncrementMovements(); if (capturedPiece != null) { CapturedPieces.Add(capturedPiece); text.AppendLine(string.Concat("Captured: ", capturedPiece.GetType())); } WriteLog.ChecksLogs(text); if (Board.Piece(target) is King && ((target.Column + 2 == origin.Column) || (target.Column - 2 == origin.Column))) { ExecuteCastling(Board.Piece(target)); } if (Board.Piece(target) != null && Board.Piece(target) is Pawn && origin.Column != target.Column && capturedPiece == null) { capturedPiece = ExecuteEnPassant(Board.Piece(target), origin); } if (capturedPiece != null) { CapturedPieces.Add(capturedPiece); } return(capturedPiece); }
public void MovePiece(ChessPiece piece, byte rowIndex, byte colIndex) { try { //remove the piece from its original position ChessBoardCell originalPosition = piece.BoardPosition; originalPosition.PieceInCell = null; //Obtain the new position ChessBoardCell cell = this[rowIndex, colIndex]; if (cell != null) { //Check if the new position capture a piece. if (cell.PieceInCell != null) { if (cell.PieceInCell.Color != piece.Color) { //Capture the other piece ChessPiece capturedPiece = cell.PieceInCell; CapturedPieces.Add(capturedPiece); //Player Expected Action: The player remove the piece of his active piece list. //Piece Expected Action: Update its internal position record. OnNewPieceCaptured?.Invoke(this, new PieceCapturedEventArgs(capturedPiece)); //Remove the captured piece from board. cell.PieceInCell = null; } else { throw new ChessExceptionInvalidGameAction(ExceptionCode.InvalidAttemptToCapturePiece, "The piece that you are trying to capture has the same color than the moved piece"); } } cell.PieceInCell = piece; piece.BoardPosition = cell; } } catch (Exception) { throw new ChessExceptionInvalidGameAction(ExceptionCode.InvalidCellIndexes, "Row Index: " + rowIndex + ", Col Index: " + colIndex); } }
public void Handle(PieceTaken message) { CapturedPieces.Add(PieceImageFactory.GetImage(message.Piece)); }