Пример #1
0
        public void UndoMovement(Position origin, Position destiny, Piece capturedPiece)
        {
            Piece piece = Board.RemovePiece(destiny);

            piece.DecreaseMovementQuantity();
            if (capturedPiece != null)
            {
                Board.PlacePiece(capturedPiece, destiny);
                CapturedPieces.Remove(capturedPiece);
            }

            Board.PlacePiece(piece, origin);

            // #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(destinyTower);
                tower.DecreaseMovementQuantity();
                Board.PlacePiece(tower, originTower);
            }

            // #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(destinyTower);
                tower.DecreaseMovementQuantity();
                Board.PlacePiece(tower, originTower);
            }

            // #Special Move en Passant
            if (piece is Pawn)
            {
                if (origin.Column != destiny.Column && capturedPiece == VulnerableEnPassant)
                {
                    Piece    pawn = Board.RemovePiece(destiny);
                    Position pawnPosition;
                    if (piece.Color == Color.White)
                    {
                        pawnPosition = new Position(3, destiny.Column);
                    }
                    else
                    {
                        pawnPosition = new Position(4, destiny.Column);
                    }
                    Board.PlacePiece(pawn, pawnPosition);
                }
            }
        }
Пример #2
0
        private void UndoMove(Position origin, Position destiny, GamePiece capturedPiece)
        {
            GamePiece piece = Board.RemovePiece(destiny);

            piece.DecrementNumberOfMovements();

            if (capturedPiece != null)
            {
                Board.PlacePiece(capturedPiece, destiny);
                CapturedPieces.Remove(capturedPiece);
            }
            Board.PlacePiece(piece, origin);

            // 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(rookDestiny);
                rook.DecrementNumberOfMovements();
                Board.PlacePiece(rook, rookOrigin);
            }
            // Lesser 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(rookDestiny);
                rook.DecrementNumberOfMovements();
                Board.PlacePiece(rook, rookOrigin);
            }
            // En Passent
            if (piece is Pawn)
            {
                if (destiny.Column != origin.Column && capturedPiece == EnPassentTarget)
                {
                    GamePiece targetPawn = Board.RemovePiece(destiny);
                    Position  targetPawnPosition;
                    if (piece.Color == Color.White)
                    {
                        targetPawnPosition = new Position(3, destiny.Column);
                    }
                    else
                    {
                        targetPawnPosition = new Position(4, destiny.Column);
                    }
                    Board.PlacePiece(targetPawn, targetPawnPosition);
                }
            }
        }
Пример #3
0
        private void UndoMove(Position source, Position target, Piece capturedPiece)
        {
            ChessPiece p = (ChessPiece)Board.RemovePiece(target);

            p.DecreaseMoveCount();
            Board.PlacePiece(p, source);

            if (capturedPiece != null)
            {
                Board.PlacePiece(capturedPiece, target);
                CapturedPieces.Remove(capturedPiece);
                PiecesOnTheBoard.Add(capturedPiece);
            }

            //SpecialMove Castling KingSide Rook
            if (p 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(targetRook);
                Board.PlacePiece(rook, sourceRook);
                rook.DecreaseMoveCount();
            }
            //SpecialMove Castling QueenSide Rook
            if (p 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(targetRook);
                Board.PlacePiece(rook, sourceRook);
                rook.DecreaseMoveCount();
            }

            //SpecialMove EnPassant
            if (p is Pawn)
            {
                if (source.Column != target.Column && capturedPiece == EnPassantVulnerable)
                {
                    ChessPiece pawn = (ChessPiece)Board.RemovePiece(target);
                    Position   pawnPosition;
                    if (p.Color == Color.White)
                    {
                        pawnPosition = new Position(3, target.Column);
                    }
                    else
                    {
                        pawnPosition = new Position(3, target.Column);
                    }
                    Board.PlacePiece(pawn, pawnPosition);
                }
            }
        }
Пример #4
0
        public void UndoMove(Position from, Position to, Piece capturedPiece)
        {
            Piece p = Board.RemovePiece(to);

            p.SubtractQntMoves();
            if (capturedPiece != null)
            {
                Board.PutPiece(capturedPiece, to);
                CapturedPieces.Remove(capturedPiece);
            }

            Board.PutPiece(p, from);
        }
        public void UndoChessMove(Position origin, Position destiny, Piece takenPiece)
        {
            Piece returnedPiece = Board.RemovePiece(destiny);

            returnedPiece.DecreaseQtyMovement();
            Board.AddressPiece(returnedPiece, origin);
            if (takenPiece != null)
            {
                Board.AddressPiece(takenPiece, destiny);
                CapturedPieces.Remove(takenPiece);
            }

            //Special move: Castling
            //Short Castling
            if (returnedPiece 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(rookDestiny);
                movedRook.DecreaseQtyMovement();
                Board.AddressPiece(movedRook, rookOrigin);
            }
            //Long Castling
            if (returnedPiece 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(rookDestiny);
                movedRook.DecreaseQtyMovement();
                Board.AddressPiece(movedRook, rookOrigin);
            }

            //Special move: En passant
            if (returnedPiece is Pawn)
            {
                if (origin.Column != destiny.Column && takenPiece == VulnerableToEnPassant)
                {
                    Piece    EnPassantCapture = Board.RemovePiece(destiny);
                    Position EnPassantReturnPosition;
                    if (returnedPiece.Color == Color.White)
                    {
                        EnPassantReturnPosition = new Position(3, destiny.Column);
                    }
                    else
                    {
                        EnPassantReturnPosition = new Position(4, destiny.Column);
                    }
                    Board.AddressPiece(EnPassantCapture, EnPassantReturnPosition);
                }
            }
        }
Пример #6
0
        public void UndoMoviment(Position origin, Position destiny, Piece captPiece)
        {
            Piece p = ChessBoard.RemovePiece(destiny);

            p.DecrementQnttMovies();
            if (captPiece != null)
            {
                ChessBoard.InsertPiece(captPiece, destiny);
                CapturedPieces.Remove(captPiece);
            }
            ChessBoard.InsertPiece(p, origin);

            //#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(destinyT);
                T.DecrementQnttMovies();
                ChessBoard.InsertPiece(T, originT);
            }
            //#jogada especial roque pequeno
            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(destinyT);
                T.DecrementQnttMovies();
                ChessBoard.InsertPiece(T, originT);
            }
            //#jogada especial EnPassant
            if (p is Pawn)
            {
                if (origin.Column != destiny.Column && captPiece == VulnerableForEnPassant)
                {
                    Piece    pawn = ChessBoard.RemovePiece(destiny);
                    Position posP;
                    if (p.Color == Color.Branca)
                    {
                        posP = new Position(3, destiny.Column);
                    }
                    else
                    {
                        posP = new Position(4, destiny.Column);
                    }
                }
            }
        }
Пример #7
0
        /// <summary>
        /// Undo the movement itself that would put in check
        /// </summary>
        /// <param name="piece">Current piece</param>
        /// <param name="capturedPiece">Captured piece</param>
        /// <param name="origin">Origin of current piece</param>
        private void UndoMovement(Position origin, Position target, Piece captured)
        {
            Piece piece = Board.RemovePiece(target);

            piece.DecrementMovements();
            StringBuilder text      = new StringBuilder();
            Position      originAux = null;

            if (captured != null)
            {
                text.AppendLine("Undo captured");
                text.AppendLine(string.Concat("Captured Piece: ", captured.GetType()));
                text.AppendLine(string.Concat("Color: ", captured.Color.ToString()));
                if (captured != EnableEnPassant)
                {
                    Board.PutPiece(captured, target);
                    text.AppendLine(string.Concat("Origin ChessPosition: ", origin.ToChessPosition().ToString(), " Origin CanvasPosition(Column, Row): ", origin.Column, ", ", origin.Row));
                    CapturedPieces.Remove(captured);
                }
                else
                {
                    originAux = new Position(origin.Row, target.Column);
                    Board.PutPiece(captured, originAux);
                    CapturedPieces.Remove(captured);
                    text.AppendLine(string.Concat("Origin ChessPosition: ", originAux.ToChessPosition().ToString(), " Origin CanvasPosition(Column, Row): ", originAux.Column, ", ", originAux.Row));
                }

                text.AppendLine(string.Concat("Turn: ", TotalMoves));
                text.AppendLine(string.Concat("Date: ", DateTime.Now.ToShortDateString(), " Time: ", DateTime.Now.ToShortTimeString()));
                text.AppendLine();
            }

            Board.PutPiece(piece, origin);

            text.AppendLine(string.Concat("Undo Piece: ", captured.GetType()));
            text.AppendLine(string.Concat("Color: ", captured.Color.ToString()));
            text.AppendLine(string.Concat("Origin ChessPosition: ", origin.ToChessPosition().ToString(), " Origin CanvasPosition(Column, Row): ", origin.Column, ", ", origin.Row));
            text.AppendLine(string.Concat("Turn: ", TotalMoves));
            text.AppendLine(string.Concat("Date: ", DateTime.Now.ToShortDateString(), " Time: ", DateTime.Now.ToShortTimeString()));

            WriteLog.ChecksLogs(text);
        }