コード例 #1
0
        public void UnMovePiece(Move move)
        {
            Position to   = move.To;
            Position from = move.From;

            // Pawn demotion
            if (move.Promotion)
            {
                Board.DemotePawn(move);
            }

            if (move.Piece is King)
            {
                King king = move.Piece as King;

                if (move.Piece.MoveCount == 1)
                {
                    if (king.Color == PieceColor.White)
                    {
                        Board.UpdatePieceEnum(king, PieceEnum.WhiteKing);
                    }
                    else if (king.Color == PieceColor.Black)
                    {
                        Board.UpdatePieceEnum(king, PieceEnum.BlackKing);
                    }
                }

                if (move.Castle)
                {
                    Board.MovePiece(move.CastleMove.To, move.CastleMove.From);
                    move.CastleMove.Piece.MoveCount--;
                }
            }

            Board.MovePiece(to, from);
            move.Piece.MoveCount--;

            if (!(move.Capture is Empty))
            {
                Board.AddPiece(move.Capture.Position.Row, move.Capture.Position.Col, move.Capture);
            }

            if (progress.Count > 0)
            {
                progress.Pop();
            }
            if (moves.Count > 0)
            {
                moves.Pop();
            }
            if (prevHashes.Count > 0)
            {
                prevHashes.Pop();
            }

            if (CurrentTurn == PieceColor.White)
            {
                CurrentTurn = PieceColor.Black;
                if (moves.Count > 0 && moves.Peek().EnPassantMove)
                {
                    Board.UpdatePieceEnum(moves.Peek().Piece, PieceEnum.WhitePawnEnPassant);
                }
            }
            else
            {
                CurrentTurn = PieceColor.White;
                if (moves.Count > 0 && moves.Peek().EnPassantMove)
                {
                    Board.UpdatePieceEnum(moves.Peek().Piece, PieceEnum.BlackPawnEnPassant);
                }
            }
        }