Esempio n. 1
0
 public void UnMove(int move)
 {
     board.BoardArray[HomeSquare] = null;
     board.BoardArray[MovePackHelper.GetStartSquare(move)] = this;
     board.ZKey ^= ZKey;
     HomeSquare  = MovePackHelper.GetStartSquare(move);
     board.ZKey ^= ZKey;
     OnUnMove(move);
 }
Esempio n. 2
0
        public void Move(int move)
        {
            halfMovesStack.Push(halfMoves);
            IPiece p = board[MovePackHelper.GetStartSquare(move)];

            if (MovePackHelper.HasCapture(move))
            {
                captured.Push(board[MovePackHelper.GetEndSquare(move)]);
                board[MovePackHelper.GetEndSquare(move)].Capture();
                ZKey           ^= ZKeyForCastling[(int)CastlingStatus];
                CastlingStatus ^= MovePackHelper.GetCastleMask(move);
                ZKey           ^= ZKeyForCastling[(int)CastlingStatus];
                halfMoves       = 0;
            }
            else
            {
                if (p.Type != PieceType.Pawn)
                {
                    halfMoves++;
                }
            }
            p.Move(move);
            if (MovePackHelper.HasCastling(move))
            {
                DoCastling(move);
            }
            PromotionTo to = MovePackHelper.GetPromotion(move);

            if (to != PromotionTo.None)
            {
                DoPromotion(p, move, to);
            }
            moveStack.Push(move);
            if (!epTouched)
            {
                PlaceEnpassant(Square.Invalid);
            }
            epTouched = false;
            if (ToMove == Side.Black)
            {
                movesCount++;
            }
            Flip();
            Debug.Assert(ZKey == CalcZKey());
        }