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); }
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()); }