mirror of
https://github.com/OMGeeky/hcsalmon1-Chess-Engine-Test.git
synced 2025-12-27 22:57:45 +01:00
Add files via upload
This commit is contained in:
236
Java/MoveUtils.java
Normal file
236
Java/MoveUtils.java
Normal file
@@ -0,0 +1,236 @@
|
||||
|
||||
public class MoveUtils
|
||||
{
|
||||
|
||||
static final int BISHOP_UP_LEFT = 0;
|
||||
static final int BISHOP_UP_RIGHT = 1;
|
||||
static final int BISHOP_DOWN_LEFT = 2;
|
||||
static final int BISHOP_DOWN_RIGHT = 3;
|
||||
|
||||
static final int ROOK_UP = 0;
|
||||
static final int ROOK_DOWN = 2;
|
||||
static final int ROOK_LEFT = 3;
|
||||
static final int ROOK_RIGHT = 1;
|
||||
|
||||
|
||||
public static long getRookMovesSeparate(long combined_occ, int square)
|
||||
{
|
||||
long combinedAttacks = 0;
|
||||
|
||||
long rookAttackUp = MoveConstants.ROOK_ATTACKS[ROOK_UP][square];
|
||||
long rookAndOccs = rookAttackUp & combined_occ;
|
||||
if (rookAndOccs != 0)
|
||||
{
|
||||
long lastValue = rookAndOccs;
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
rookAndOccs = rookAndOccs & rookAndOccs - 1;
|
||||
if (rookAndOccs == 0)
|
||||
{
|
||||
int endSquare = Perft.bitScanForward(lastValue); // Implement this method
|
||||
combinedAttacks |= Inb.INBETWEEN_BITBOARDS[square][endSquare];
|
||||
break;
|
||||
}
|
||||
lastValue = rookAndOccs;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
combinedAttacks |= rookAttackUp;
|
||||
}
|
||||
// Pr.println("Rook up");
|
||||
//Pr.printlongLn(combinedAttacks);
|
||||
|
||||
long rookAttackLeft = MoveConstants.ROOK_ATTACKS[ROOK_LEFT][square];
|
||||
rookAndOccs = rookAttackLeft & combined_occ;
|
||||
if (rookAndOccs != 0)
|
||||
{
|
||||
long lastValue = rookAndOccs;
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
rookAndOccs = rookAndOccs & rookAndOccs - 1;
|
||||
if (rookAndOccs == 0)
|
||||
{
|
||||
int endSquare = Perft.bitScanForward(lastValue); // Implement this method
|
||||
combinedAttacks |= Inb.INBETWEEN_BITBOARDS[square][endSquare];
|
||||
break;
|
||||
}
|
||||
lastValue = rookAndOccs;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
combinedAttacks |= rookAttackLeft;
|
||||
}
|
||||
//Pr.println("Rook left");
|
||||
//Pr.printlongLn(combinedAttacks);
|
||||
|
||||
long rookAttackDown = MoveConstants.ROOK_ATTACKS[ROOK_DOWN][square];
|
||||
rookAndOccs = rookAttackDown & combined_occ;
|
||||
if (rookAndOccs != 0)
|
||||
{
|
||||
int endSquare = Perft.bitScanForward(rookAndOccs); // Implement this method
|
||||
combinedAttacks |= Inb.INBETWEEN_BITBOARDS[square][endSquare];
|
||||
}
|
||||
else
|
||||
{
|
||||
combinedAttacks |= rookAttackDown;
|
||||
}
|
||||
// Pr.println("Rook down");
|
||||
// Pr.printlongLn(combinedAttacks);
|
||||
|
||||
long rookAttackRight = MoveConstants.ROOK_ATTACKS[ROOK_RIGHT][square];
|
||||
rookAndOccs = rookAttackRight & combined_occ;
|
||||
if (rookAndOccs != 0)
|
||||
{
|
||||
int endSquare = Perft.bitScanForward(rookAndOccs); // Implement this method
|
||||
combinedAttacks |= Inb.INBETWEEN_BITBOARDS[square][endSquare];
|
||||
}
|
||||
else
|
||||
{
|
||||
combinedAttacks |= rookAttackRight;
|
||||
}
|
||||
// Pr.println("Rook right");
|
||||
// Pr.printlongLn(combinedAttacks);
|
||||
|
||||
return combinedAttacks;
|
||||
}
|
||||
|
||||
public static long getBishopMovesSeparate(long combined_occ, int square)
|
||||
{
|
||||
|
||||
//Pr.printIntLn(square);
|
||||
//Pr.printSquareLn(square);
|
||||
|
||||
long combinedAttacks = 0;
|
||||
|
||||
long bishopAttackUpLeft = MoveConstants.BISHOP_ATTACKS[BISHOP_UP_LEFT][square];
|
||||
long bishopAndOccs = bishopAttackUpLeft & combined_occ;
|
||||
if (bishopAndOccs != 0) {
|
||||
long lastValue = bishopAndOccs;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
bishopAndOccs &= bishopAndOccs - 1;
|
||||
if (bishopAndOccs == 0) {
|
||||
int endSquare = Perft.bitScanForward(lastValue); // Implement this method
|
||||
combinedAttacks |= Inb.INBETWEEN_BITBOARDS[square][endSquare];
|
||||
break;
|
||||
}
|
||||
lastValue = bishopAndOccs;
|
||||
}
|
||||
} else {
|
||||
combinedAttacks |= bishopAttackUpLeft;
|
||||
}
|
||||
// Pr.println("Bishop up left");
|
||||
//Pr.printlongLn(combinedAttacks);
|
||||
|
||||
long bishopAttackUpRight = MoveConstants.BISHOP_ATTACKS[BISHOP_UP_RIGHT][square];
|
||||
bishopAndOccs = bishopAttackUpRight & combined_occ;
|
||||
if (bishopAndOccs != 0) {
|
||||
long lastValue = bishopAndOccs;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
bishopAndOccs &= bishopAndOccs - 1;
|
||||
if (bishopAndOccs == 0) {
|
||||
int endSquare = Perft.bitScanForward(lastValue); // Implement this method
|
||||
combinedAttacks |= Inb.INBETWEEN_BITBOARDS[square][endSquare];
|
||||
break;
|
||||
}
|
||||
lastValue = bishopAndOccs;
|
||||
}
|
||||
} else {
|
||||
combinedAttacks |= bishopAttackUpRight;
|
||||
}
|
||||
// Pr.println("Bishop up right");
|
||||
// Pr.printlongLn(combinedAttacks);
|
||||
|
||||
long bishopAttackDownLeft = MoveConstants.BISHOP_ATTACKS[BISHOP_DOWN_LEFT][square];
|
||||
|
||||
// Pr.println("down left bitboard");
|
||||
// Pr.printlongLn(bishopAttackDownLeft);
|
||||
// Pr.println("__________");
|
||||
|
||||
bishopAndOccs = bishopAttackDownLeft & combined_occ;
|
||||
if (bishopAndOccs != 0) {
|
||||
int endSquare = Perft.bitScanForward(bishopAndOccs); // Implement this method
|
||||
combinedAttacks |= Inb.INBETWEEN_BITBOARDS[square][endSquare];
|
||||
} else {
|
||||
combinedAttacks |= bishopAttackDownLeft;
|
||||
}
|
||||
// Pr.println("Bishop down left");
|
||||
// Pr.printlongLn(combinedAttacks);
|
||||
|
||||
long bishopAttackDownRight = MoveConstants.BISHOP_ATTACKS[BISHOP_DOWN_RIGHT][square];
|
||||
bishopAndOccs = bishopAttackDownRight & combined_occ;
|
||||
if (bishopAndOccs != 0) {
|
||||
int endSquare = Perft.bitScanForward(bishopAndOccs); // Implement this method
|
||||
combinedAttacks |= Inb.INBETWEEN_BITBOARDS[square][endSquare];
|
||||
} else {
|
||||
combinedAttacks |= bishopAttackDownRight;
|
||||
}
|
||||
// Pr.println("Bishop down right");
|
||||
// Pr.printlongLn(combinedAttacks);
|
||||
return combinedAttacks;
|
||||
}
|
||||
|
||||
public static Boolean Is_Square_Attacked_By_Black_Global(int square, long occupancy)
|
||||
{
|
||||
|
||||
// if (Board.bitboard_array_global[GenConst.BP] & MoveConstants.WHITE_PAWN_ATTACKS[square]).signum() != 0) {
|
||||
//return true;
|
||||
//}
|
||||
//if (Board.bitboard_array_global[GenConst.BN] & MoveConstants.KNIGHT_ATTACKS[square]).signum() != 0) {
|
||||
//return true;
|
||||
//}
|
||||
//if (Board.bitboard_array_global[GenConst.BK] & MoveConstants.KING_ATTACKS[square]).signum() != 0) {
|
||||
/// return true;
|
||||
//}
|
||||
//long bishopAttacks = MoveUtils.GetBishopMovesSeparate(occupancy, square);
|
||||
//if (Board.bitboard_array_global[GenConst.BB] & bishopAttacks).signum() != 0) {
|
||||
/// return true;
|
||||
//}
|
||||
//if (Board.bitboard_array_global[GenConst.BQ] & bishopAttacks).signum() != 0) {
|
||||
/// return true;
|
||||
//}
|
||||
//B/igInteger rookAttacks = MoveUtils.GetRookMovesSeparate(occupancy, square);
|
||||
//if (Board.bitboard_array_global[GenConst.BR] & rookAttacks).signum() != 0) {
|
||||
//return true;
|
||||
//}
|
||||
//if (Board.bitboard_array_global[GenConst.BQ] & rookAttacks).signum() != 0) {
|
||||
//return true;
|
||||
//}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public static Boolean Is_Square_Attacked_By_White_Global(int square, long occupancy)
|
||||
{
|
||||
|
||||
// if (Board.bitboard_array_global[GenConst.WP] & MoveConstants.BLACK_PAWN_ATTACKS[square]).signum() != 0) {
|
||||
//return true;
|
||||
//}
|
||||
//if (Board.bitboard_array_global[GenConst.WN] & MoveConstants.KNIGHT_ATTACKS[square]).signum() != 0) {
|
||||
//return true;
|
||||
//}
|
||||
//if (Board.bitboard_array_global[GenConst.WK] & MoveConstants.KING_ATTACKS[square]).signum() != 0) {
|
||||
//return true;
|
||||
//}
|
||||
//long bishopAttacks = MoveUtils.GetBishopMovesSeparate(occupancy, square);
|
||||
//if (Board.bitboard_array_global[GenConst.WB] & bishopAttacks).signum() != 0) {
|
||||
//return true;
|
||||
//}
|
||||
//if (Board.bitboard_array_global[GenConst.WQ] & bishopAttacks).signum() != 0) {
|
||||
//return true;
|
||||
//}
|
||||
//long rookAttacks = MoveUtils.GetRookMovesSeparate(occupancy, square);
|
||||
//if (Board.bitboard_array_global[GenConst.WR] & rookAttacks).signum() != 0) {
|
||||
//return true;
|
||||
//}
|
||||
//if (Board.bitboard_array_global[GenConst.WQ] & rookAttacks).signum() != 0) {
|
||||
//return true;
|
||||
//}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user