public static UInt64 GetKingAttacks(UInt64 king) { UInt64 attacks = BitOps.OneStepEast(king) | BitOps.OneStepWest(king); king |= attacks; attacks |= BitOps.OneStepNorth(king) | BitOps.OneStepSouth(king); return(attacks); }
private static UInt64 GetKnightAttacks(UInt64 knights) { UInt64 west, east, attacks; east = BitOps.OneStepEast(knights); west = BitOps.OneStepWest(knights); attacks = (east | west) << 16; attacks |= (east | west) >> 16; east = BitOps.OneStepEast(east); west = BitOps.OneStepWest(west); attacks |= (east | west) << 8; attacks |= (east | west) >> 8; return(attacks); }
public static void initRayAttacks() { UInt64 rayAttack; for (byte i = 0; i < 64; i++) { UInt64 square = 1UL << i; //nort rayAttack = BitOps.OneStepNorth(square); rayAttack |= BitOps.OneStepNorth(rayAttack); rayAttack |= BitOps.OneStepNorth(rayAttack); rayAttack |= BitOps.OneStepNorth(rayAttack); rayAttack |= BitOps.OneStepNorth(rayAttack); rayAttack |= BitOps.OneStepNorth(rayAttack); rayAttack |= BitOps.OneStepNorth(rayAttack); rayAttacks[0, i] = rayAttack; //sout rayAttack = BitOps.OneStepSouth(square); rayAttack |= BitOps.OneStepSouth(rayAttack); rayAttack |= BitOps.OneStepSouth(rayAttack); rayAttack |= BitOps.OneStepSouth(rayAttack); rayAttack |= BitOps.OneStepSouth(rayAttack); rayAttack |= BitOps.OneStepSouth(rayAttack); rayAttack |= BitOps.OneStepSouth(rayAttack); rayAttacks[1, i] = rayAttack; //east rayAttack = BitOps.OneStepEast(square); rayAttack |= BitOps.OneStepEast(rayAttack); rayAttack |= BitOps.OneStepEast(rayAttack); rayAttack |= BitOps.OneStepEast(rayAttack); rayAttack |= BitOps.OneStepEast(rayAttack); rayAttack |= BitOps.OneStepEast(rayAttack); rayAttack |= BitOps.OneStepEast(rayAttack); rayAttacks[2, i] = rayAttack; //west rayAttack = BitOps.OneStepWest(square); rayAttack |= BitOps.OneStepWest(rayAttack); rayAttack |= BitOps.OneStepWest(rayAttack); rayAttack |= BitOps.OneStepWest(rayAttack); rayAttack |= BitOps.OneStepWest(rayAttack); rayAttack |= BitOps.OneStepWest(rayAttack); rayAttack |= BitOps.OneStepWest(rayAttack); rayAttacks[3, i] = rayAttack; //noEa rayAttack = BitOps.OneStepNorthEast(square); rayAttack |= BitOps.OneStepNorthEast(rayAttack); rayAttack |= BitOps.OneStepNorthEast(rayAttack); rayAttack |= BitOps.OneStepNorthEast(rayAttack); rayAttack |= BitOps.OneStepNorthEast(rayAttack); rayAttack |= BitOps.OneStepNorthEast(rayAttack); rayAttack |= BitOps.OneStepNorthEast(rayAttack); rayAttacks[4, i] = rayAttack; //soWe rayAttack = BitOps.OneStepSouthWest(square); rayAttack |= BitOps.OneStepSouthWest(rayAttack); rayAttack |= BitOps.OneStepSouthWest(rayAttack); rayAttack |= BitOps.OneStepSouthWest(rayAttack); rayAttack |= BitOps.OneStepSouthWest(rayAttack); rayAttack |= BitOps.OneStepSouthWest(rayAttack); rayAttack |= BitOps.OneStepSouthWest(rayAttack); rayAttacks[5, i] = rayAttack; //noWe rayAttack = BitOps.OneStepNorthWest(square); rayAttack |= BitOps.OneStepNorthWest(rayAttack); rayAttack |= BitOps.OneStepNorthWest(rayAttack); rayAttack |= BitOps.OneStepNorthWest(rayAttack); rayAttack |= BitOps.OneStepNorthWest(rayAttack); rayAttack |= BitOps.OneStepNorthWest(rayAttack); rayAttack |= BitOps.OneStepNorthWest(rayAttack); rayAttacks[6, i] = rayAttack; //soEa rayAttack = BitOps.OneStepSouthEast(square); rayAttack |= BitOps.OneStepSouthEast(rayAttack); rayAttack |= BitOps.OneStepSouthEast(rayAttack); rayAttack |= BitOps.OneStepSouthEast(rayAttack); rayAttack |= BitOps.OneStepSouthEast(rayAttack); rayAttack |= BitOps.OneStepSouthEast(rayAttack); rayAttack |= BitOps.OneStepSouthEast(rayAttack); rayAttacks[7, i] = rayAttack; } }