示例#1
0
        public Piece Move(Position origin, Position destination)
        {
            Piece p = Board.RemovePiece(origin);

            p.AddMoveCount();

            Piece pieceCaptured = Board.RemovePiece(destination);

            Board.InsertPiece(p, destination);

            if (pieceCaptured != null)
            {
                Captured.Add(pieceCaptured);
            }

            // #SpecialMove Castling short
            if (p is King && destination.Column == origin.Column + 2)
            {
                Position RookOrigin      = new Position(origin.Line, origin.Column + 3);
                Position RookDestination = new Position(origin.Line, origin.Column + 1);
                Piece    R = Board.RemovePiece(RookOrigin);
                R.AddMoveCount();
                Board.InsertPiece(R, RookDestination);
            }

            // #SpecialMove Castling long
            if (p is King && destination.Column == origin.Column - 2)
            {
                Position RookOrigin      = new Position(origin.Line, origin.Column - 4);
                Position RookDestination = new Position(origin.Line, origin.Column - 1);
                Piece    R = Board.RemovePiece(RookOrigin);
                R.AddMoveCount();
                Board.InsertPiece(R, RookDestination);
            }

            // #SpecialMove En Passant
            if (p is Pawn)
            {
                if (origin.Column != destination.Column && pieceCaptured == null)
                {
                    Position posP;
                    if (p.Color == Color.White)
                    {
                        posP = new Position(destination.Line + 1, destination.Column);
                    }
                    else
                    {
                        posP = new Position(destination.Line - 1, destination.Column);
                    }

                    pieceCaptured = Board.RemovePiece(posP);
                    Captured.Add(pieceCaptured);
                }
            }

            return(pieceCaptured);
        }