Add files via upload

This commit is contained in:
Coding with Tom
2025-01-12 22:42:08 +00:00
committed by GitHub
parent 6a0607ff0d
commit 55c3acf98e
10 changed files with 9918 additions and 13 deletions

48
Java/Bitboard.java Normal file
View File

@@ -0,0 +1,48 @@
import java.math.BigInteger;
public class Bitboard
{
public static BigInteger addBit(BigInteger bitboard, int square)
{
return bitboard.setBit(square);
}
public static void printBigInteger(BigInteger bitboard)
{
for (int rank = 0; rank < 8; rank++)
{
for (int file = 0; file < 8; file++)
{
int square = rank * 8 + file;
processSquare(bitboard, square);
}
System.out.println();
}
System.out.println("BigInteger: " + bitboard);
}
static void processSquare(BigInteger bitboard, int square)
{
if (bitboard.testBit(square))
{
System.out.print("X ");
}
else
{
System.out.print("_ ");
}
}
static int bitScanForwardSlow(BigInteger bitboard)
{
for (int i = 0; i < 64; i++)
{
if (bitboard.testBit(i))
{
return i;
}
}
return -1;
}
}

121
Java/Board.java Normal file
View File

@@ -0,0 +1,121 @@
import java.math.BigInteger;
public class Board
{
public static BigInteger[] bitboard_array_global = new BigInteger[12];
public static boolean is_white_global = true;
public static boolean[] castle_rights_global = new boolean[4];
public static int ep;
static final BigInteger BP_STARTING_POSITIONS = new BigInteger("65280");
static final BigInteger WP_STARTING_POSITIONS = new BigInteger("71776119061217280");
static final BigInteger BK_STARTING_POSITION = new BigInteger("16");
static final BigInteger WK_STARTING_POSITION = new BigInteger("1152921504606846976");
static final BigInteger BN_STARTING_POSITIONS = new BigInteger("66");
static final BigInteger WN_STARTING_POSITIONS = new BigInteger("4755801206503243776");
static final BigInteger WR_STARTING_POSITIONS = new BigInteger("9295429630892703744");
static final BigInteger BR_STARTING_POSITIONS = new BigInteger("129");
static final BigInteger BB_STARTING_POSITIONS = new BigInteger("36");
static final BigInteger WB_STARTING_POSITIONS = new BigInteger("2594073385365405696");
static final BigInteger WQ_STARTING_POSITION = new BigInteger("576460752303423488");
static final BigInteger BQ_STARTING_POSITION = new BigInteger("8");
public static void SetTrickyPosition() {
ep = GenConst.NO_SQUARE;
is_white_global = true;
castle_rights_global[0] = true;
castle_rights_global[1] = true;
castle_rights_global[2] = true;
castle_rights_global[3] = true;
bitboard_array_global[GenConst.WP] = new BigInteger("65020788473856000");
bitboard_array_global[GenConst.WN] = new BigInteger("4398314946560");
bitboard_array_global[GenConst.WB] = new BigInteger("6755399441055744");
bitboard_array_global[GenConst.WR] = new BigInteger("9295429630892703744");
bitboard_array_global[GenConst.WQ] = new BigInteger("35184372088832");
bitboard_array_global[GenConst.WK] = new BigInteger("1152921504606846976");
bitboard_array_global[GenConst.BP] = new BigInteger("140746083544320");
bitboard_array_global[GenConst.BN] = new BigInteger("2228224");
bitboard_array_global[GenConst.BB] = new BigInteger("81920");
bitboard_array_global[GenConst.BR] = new BigInteger("129");
bitboard_array_global[GenConst.BQ] = new BigInteger("4096");
bitboard_array_global[GenConst.BK] = new BigInteger("16");
}
public static void SetStartingPosition() {
ep = GenConst.NO_SQUARE;
is_white_global = true;
castle_rights_global[0] = true;
castle_rights_global[1] = true;
castle_rights_global[2] = true;
castle_rights_global[3] = true;
bitboard_array_global[GenConst.WP] = WP_STARTING_POSITIONS;
bitboard_array_global[GenConst.WN] = WN_STARTING_POSITIONS;
bitboard_array_global[GenConst.WB] = WB_STARTING_POSITIONS;
bitboard_array_global[GenConst.WR] = WR_STARTING_POSITIONS;
bitboard_array_global[GenConst.WQ] = WQ_STARTING_POSITION;
bitboard_array_global[GenConst.WK] = WK_STARTING_POSITION;
bitboard_array_global[GenConst.BP] = BP_STARTING_POSITIONS;
bitboard_array_global[GenConst.BN] = BN_STARTING_POSITIONS;
bitboard_array_global[GenConst.BB] = BB_STARTING_POSITIONS;
bitboard_array_global[GenConst.BR] = BR_STARTING_POSITIONS;
bitboard_array_global[GenConst.BQ] = BQ_STARTING_POSITION;
bitboard_array_global[GenConst.BK] = BK_STARTING_POSITION;
}
static final char[] PieceNames = {'P', 'N', 'B', 'R', 'Q', 'K', 'P', 'N', 'B', 'R', 'Q', 'K', '_'};
static final char[] PieceColours = {'W', 'W', 'W', 'W', 'W', 'W', 'B', 'B', 'B', 'B', 'B', 'B', '_'};
static final int EMPTY = 12;
static boolean IsOccupied(BigInteger bitboard, int square) {
return !bitboard.and(MoveConstants.SQUARE_BBS[square]).equals(BigInteger.ZERO);
}
static int GetOccupiedIndex(int square) {
for (int i = 0; i < 12; i++) {
if (IsOccupied(bitboard_array_global[i], square)) {
return i;
}
}
return EMPTY;
}
static int[] fillBoardArray() {
int[] boardArray = new int[64];
for (int i = 0; i < 64; i++) {
boardArray[i] = GetOccupiedIndex(i);
}
return boardArray;
}
public static void PrintBoard() {
System.out.println("Board:");
int[] boardArray = fillBoardArray();
for (int rank = 0; rank < 8; rank++) {
System.out.print(" ");
for (int file = 0; file < 8; file++) {
int square = (rank * 8) + file;
System.out.printf("%c%c ", PieceColours[boardArray[square]], PieceNames[boardArray[square]]);
}
System.out.println();
}
System.out.println();
System.out.printf("White to play: %b\n", is_white_global);
System.out.printf("Castle: %b %b %b %b\n", castle_rights_global[0], castle_rights_global[1], castle_rights_global[2], castle_rights_global[3]);
System.out.printf("ep: %d\n", ep);
System.out.println();
System.out.println();
}
}

View File

@@ -1,13 +1,13 @@
public class ChessEngine
{
public static void main(String[] args)
{
//Testing.testRookMoves();
Board.SetTrickyPosition();
//Board.SetStartingPosition();
Board.PrintBoard();
Perft.RunPerftInlineGlobalOcc(2);
//Board.PrintBoard();
}
}
public class ChessEngine
{
public static void main(String[] args)
{
//Testing.testRookMoves();
Board.SetTrickyPosition();
//Board.SetStartingPosition();
Board.PrintBoard();
Perft.RunPerftInlineGlobalOcc(2);
//Board.PrintBoard();
}
}

136
Java/GenConst.java Normal file
View File

@@ -0,0 +1,136 @@
public class GenConst {
public static final int WP = 0;
public static final int WN = 1;
public static final int WB = 2;
public static final int WR = 3;
public static final int WQ = 4;
public static final int WK = 5;
public static final int BP = 6;
public static final int BN = 7;
public static final int BB = 8;
public static final int BR = 9;
public static final int BQ = 10;
public static final int BK = 11;
public static final int EMPTY = 12;
public static final int TAG_NONE = 0;
public static final int TAG_CAPTURE = 1;
public static final int TAG_WHITEEP = 2;
public static final int TAG_BLACKEP = 3;
public static final int TAG_WCASTLEKS = 4;
public static final int TAG_WCASTLEQS = 5;
public static final int TAG_BCASTLEKS = 6;
public static final int TAG_BCASTLEQS = 7;
public static final int TAG_BKnightPromotion = 8;
public static final int TAG_BBishopPromotion = 9;
public static final int TAG_BQueenPromotion = 10;
public static final int TAG_BRookPromotion = 11;
public static final int TAG_WKnightPromotion = 12;
public static final int TAG_WBishopPromotion = 13;
public static final int TAG_WQueenPromotion = 14;
public static final int TAG_WRookPromotion = 15;
public static final int TAG_BCaptureKnightPromotion = 16;
public static final int TAG_BCaptureBishopPromotion = 17;
public static final int TAG_BCaptureQueenPromotion = 18;
public static final int TAG_BCaptureRookPromotion = 19;
public static final int TAG_WCaptureKnightPromotion = 20;
public static final int TAG_WCaptureBishopPromotion = 21;
public static final int TAG_WCaptureQueenPromotion = 22;
public static final int TAG_WCaptureRookPromotion = 23;
public static final int TAG_DoublePawnWhite = 24;
public static final int TAG_DoublePawnBlack = 25;
public static final int TAG_CHECK = 26;
public static final int TAG_CHECK_CAPTURE = 27;
public static final int A8 = 0;
public static final int B8 = 1;
public static final int C8 = 2;
public static final int D8 = 3;
public static final int E8 = 4;
public static final int F8 = 5;
public static final int G8 = 6;
public static final int H8 = 7;
public static final int A7 = 8;
public static final int B7 = 9;
public static final int C7 = 10;
public static final int D7 = 11;
public static final int E7 = 12;
public static final int F7 = 13;
public static final int G7 = 14;
public static final int H7 = 15;
public static final int A6 = 16;
public static final int B6 = 17;
public static final int C6 = 18;
public static final int D6 = 19;
public static final int E6 = 20;
public static final int F6 = 21;
public static final int G6 = 22;
public static final int H6 = 23;
public static final int A5 = 24;
public static final int B5 = 25;
public static final int C5 = 26;
public static final int D5 = 27;
public static final int E5 = 28;
public static final int F5 = 29;
public static final int G5 = 30;
public static final int H5 = 31;
public static final int A4 = 32;
public static final int B4 = 33;
public static final int C4 = 34;
public static final int D4 = 35;
public static final int E4 = 36;
public static final int F4 = 37;
public static final int G4 = 38;
public static final int H4 = 39;
public static final int A3 = 40;
public static final int B3 = 41;
public static final int C3 = 42;
public static final int D3 = 43;
public static final int E3 = 44;
public static final int F3 = 45;
public static final int G3 = 46;
public static final int H3 = 47;
public static final int A2 = 48;
public static final int B2 = 49;
public static final int C2 = 50;
public static final int D2 = 51;
public static final int E2 = 52;
public static final int F2 = 53;
public static final int G2 = 54;
public static final int H2 = 55;
public static final int A1 = 56;
public static final int B1 = 57;
public static final int C1 = 58;
public static final int D1 = 59;
public static final int E1 = 60;
public static final int F1 = 61;
public static final int G1 = 62;
public static final int H1 = 63;
public static final int NO_SQUARE = 64;
static char[] SQ_CHAR_Y = {
'8', '8', '8', '8', '8', '8', '8', '8',
'7', '7', '7', '7', '7', '7', '7', '7',
'6', '6', '6', '6', '6', '6', '6', '6',
'5', '5', '5', '5', '5', '5', '5', '5',
'4', '4', '4', '4', '4', '4', '4', '4',
'3', '3', '3', '3', '3', '3', '3', '3',
'2', '2', '2', '2', '2', '2', '2', '2',
'1', '1', '1', '1', '1', '1', '1', '1',
'A' // This seems like an extra value; ensure it is intentional
};
static char[] SQ_CHAR_X = {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'N' // This seems like an extra value; ensure it is intentional
};
}

4232
Java/Inb.java Normal file

File diff suppressed because it is too large Load Diff

879
Java/MoveConstants.java Normal file
View File

@@ -0,0 +1,879 @@
import java.math.BigInteger;
public class MoveConstants {
//#region
public static final BigInteger[] KNIGHT_ATTACKS =
{
new BigInteger("132096"),
new BigInteger("329728"),
new BigInteger("659712"),
new BigInteger("1319424"),
new BigInteger("2638848"),
new BigInteger("5277696"),
new BigInteger("10489856"),
new BigInteger("4202496"),
new BigInteger("33816580"),
new BigInteger("84410376"),
new BigInteger("168886289"),
new BigInteger("337772578"),
new BigInteger("675545156"),
new BigInteger("1351090312"),
new BigInteger("2685403152"),
new BigInteger("1075839008"),
new BigInteger("8657044482"),
new BigInteger("21609056261"),
new BigInteger("43234889994"),
new BigInteger("86469779988"),
new BigInteger("172939559976"),
new BigInteger("345879119952"),
new BigInteger("687463207072"),
new BigInteger("275414786112"),
new BigInteger("2216203387392"),
new BigInteger("5531918402816"),
new BigInteger("11068131838464"),
new BigInteger("22136263676928"),
new BigInteger("44272527353856"),
new BigInteger("88545054707712"),
new BigInteger("175990581010432"),
new BigInteger("70506185244672"),
new BigInteger("567348067172352"),
new BigInteger("1416171111120896"),
new BigInteger("2833441750646784"),
new BigInteger("5666883501293568"),
new BigInteger("11333767002587136"),
new BigInteger("22667534005174272"),
new BigInteger("45053588738670592"),
new BigInteger("18049583422636032"),
new BigInteger("145241105196122112"),
new BigInteger("362539804446949376"),
new BigInteger("725361088165576704"),
new BigInteger("1450722176331153408"),
new BigInteger("2901444352662306816"),
new BigInteger("5802888705324613632"),
new BigInteger("11533718717099671552"),
new BigInteger("4620693356194824192"),
new BigInteger("288234782788157440"),
new BigInteger("576469569871282176"),
new BigInteger("1224997833292120064"),
new BigInteger("2449995666584240128"),
new BigInteger("4899991333168480256"),
new BigInteger("9799982666336960512"),
new BigInteger("1152939783987658752"),
new BigInteger("2305878468463689728"),
new BigInteger("1128098930098176"),
new BigInteger("2257297371824128"),
new BigInteger("4796069720358912"),
new BigInteger("9592139440717824"),
new BigInteger("19184278881435648"),
new BigInteger("38368557762871296"),
new BigInteger("4679521487814656"),
new BigInteger("9077567998918656"),
};
public static final BigInteger[][] BISHOP_ATTACKS = {
{
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("1"),
new BigInteger("2"),
new BigInteger("4"),
new BigInteger("8"),
new BigInteger("16"),
new BigInteger("32"),
new BigInteger("64"),
new BigInteger("0"),
new BigInteger("256"),
new BigInteger("513"),
new BigInteger("1026"),
new BigInteger("2052"),
new BigInteger("4104"),
new BigInteger("8208"),
new BigInteger("16416"),
new BigInteger("0"),
new BigInteger("65536"),
new BigInteger("131328"),
new BigInteger("262657"),
new BigInteger("525314"),
new BigInteger("1050628"),
new BigInteger("2101256"),
new BigInteger("4202512"),
new BigInteger("0"),
new BigInteger("16777216"),
new BigInteger("33619968"),
new BigInteger("67240192"),
new BigInteger("134480385"),
new BigInteger("268960770"),
new BigInteger("537921540"),
new BigInteger("1075843080"),
new BigInteger("0"),
new BigInteger("4294967296"),
new BigInteger("8606711808"),
new BigInteger("17213489152"),
new BigInteger("34426978560"),
new BigInteger("68853957121"),
new BigInteger("137707914242"),
new BigInteger("275415828484"),
new BigInteger("0"),
new BigInteger("1099511627776"),
new BigInteger("2203318222848"),
new BigInteger("4406653222912"),
new BigInteger("8813306511360"),
new BigInteger("17626613022976"),
new BigInteger("35253226045953"),
new BigInteger("70506452091906"),
new BigInteger("0"),
new BigInteger("281474976710656"),
new BigInteger("564049465049088"),
new BigInteger("1128103225065472"),
new BigInteger("2256206466908160"),
new BigInteger("4512412933881856"),
new BigInteger("9024825867763968"),
new BigInteger("18049651735527937"),
},
{
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("2"),
new BigInteger("4"),
new BigInteger("8"),
new BigInteger("16"),
new BigInteger("32"),
new BigInteger("64"),
new BigInteger("128"),
new BigInteger("0"),
new BigInteger("516"),
new BigInteger("1032"),
new BigInteger("2064"),
new BigInteger("4128"),
new BigInteger("8256"),
new BigInteger("16512"),
new BigInteger("32768"),
new BigInteger("0"),
new BigInteger("132104"),
new BigInteger("264208"),
new BigInteger("528416"),
new BigInteger("1056832"),
new BigInteger("2113664"),
new BigInteger("4227072"),
new BigInteger("8388608"),
new BigInteger("0"),
new BigInteger("33818640"),
new BigInteger("67637280"),
new BigInteger("135274560"),
new BigInteger("270549120"),
new BigInteger("541097984"),
new BigInteger("1082130432"),
new BigInteger("2147483648"),
new BigInteger("0"),
new BigInteger("8657571872"),
new BigInteger("17315143744"),
new BigInteger("34630287488"),
new BigInteger("69260574720"),
new BigInteger("138521083904"),
new BigInteger("277025390592"),
new BigInteger("549755813888"),
new BigInteger("0"),
new BigInteger("2216338399296"),
new BigInteger("4432676798592"),
new BigInteger("8865353596928"),
new BigInteger("17730707128320"),
new BigInteger("35461397479424"),
new BigInteger("70918499991552"),
new BigInteger("140737488355328"),
new BigInteger("0"),
new BigInteger("567382630219904"),
new BigInteger("1134765260439552"),
new BigInteger("2269530520813568"),
new BigInteger("4539061024849920"),
new BigInteger("9078117754732544"),
new BigInteger("18155135997837312"),
new BigInteger("36028797018963968"),
new BigInteger("0"),
},
{
new BigInteger("0"),
new BigInteger("256"),
new BigInteger("66048"),
new BigInteger("16909312"),
new BigInteger("4328785920"),
new BigInteger("1108169199616"),
new BigInteger("283691315109888"),
new BigInteger("72624976668147712"),
new BigInteger("0"),
new BigInteger("65536"),
new BigInteger("16908288"),
new BigInteger("4328783872"),
new BigInteger("1108169195520"),
new BigInteger("283691315101696"),
new BigInteger("72624976668131328"),
new BigInteger("145249953336262656"),
new BigInteger("0"),
new BigInteger("16777216"),
new BigInteger("4328521728"),
new BigInteger("1108168671232"),
new BigInteger("283691314053120"),
new BigInteger("72624976666034176"),
new BigInteger("145249953332068352"),
new BigInteger("290499906664136704"),
new BigInteger("0"),
new BigInteger("4294967296"),
new BigInteger("1108101562368"),
new BigInteger("283691179835392"),
new BigInteger("72624976397598720"),
new BigInteger("145249952795197440"),
new BigInteger("290499905590394880"),
new BigInteger("580999811180789760"),
new BigInteger("0"),
new BigInteger("1099511627776"),
new BigInteger("283673999966208"),
new BigInteger("72624942037860352"),
new BigInteger("145249884075720704"),
new BigInteger("290499768151441408"),
new BigInteger("580999536302882816"),
new BigInteger("1161999072605765632"),
new BigInteger("0"),
new BigInteger("281474976710656"),
new BigInteger("72620543991349248"),
new BigInteger("145241087982698496"),
new BigInteger("290482175965396992"),
new BigInteger("580964351930793984"),
new BigInteger("1161928703861587968"),
new BigInteger("2323857407723175936"),
new BigInteger("0"),
new BigInteger("72057594037927936"),
new BigInteger("144115188075855872"),
new BigInteger("288230376151711744"),
new BigInteger("576460752303423488"),
new BigInteger("1152921504606846976"),
new BigInteger("2305843009213693952"),
new BigInteger("4611686018427387904"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
},
{
new BigInteger("9241421688590303744"),
new BigInteger("36099303471055872"),
new BigInteger("141012904183808"),
new BigInteger("550831656960"),
new BigInteger("2151686144"),
new BigInteger("8404992"),
new BigInteger("32768"),
new BigInteger("0"),
new BigInteger("4620710844295151616"),
new BigInteger("9241421688590303232"),
new BigInteger("36099303471054848"),
new BigInteger("141012904181760"),
new BigInteger("550831652864"),
new BigInteger("2151677952"),
new BigInteger("8388608"),
new BigInteger("0"),
new BigInteger("2310355422147510272"),
new BigInteger("4620710844295020544"),
new BigInteger("9241421688590041088"),
new BigInteger("36099303470530560"),
new BigInteger("141012903133184"),
new BigInteger("550829555712"),
new BigInteger("2147483648"),
new BigInteger("0"),
new BigInteger("1155177711056977920"),
new BigInteger("2310355422113955840"),
new BigInteger("4620710844227911680"),
new BigInteger("9241421688455823360"),
new BigInteger("36099303202095104"),
new BigInteger("141012366262272"),
new BigInteger("549755813888"),
new BigInteger("0"),
new BigInteger("577588851233521664"),
new BigInteger("1155177702467043328"),
new BigInteger("2310355404934086656"),
new BigInteger("4620710809868173312"),
new BigInteger("9241421619736346624"),
new BigInteger("36099165763141632"),
new BigInteger("140737488355328"),
new BigInteger("0"),
new BigInteger("288793326105133056"),
new BigInteger("577586652210266112"),
new BigInteger("1155173304420532224"),
new BigInteger("2310346608841064448"),
new BigInteger("4620693217682128896"),
new BigInteger("9241386435364257792"),
new BigInteger("36028797018963968"),
new BigInteger("0"),
new BigInteger("144115188075855872"),
new BigInteger("288230376151711744"),
new BigInteger("576460752303423488"),
new BigInteger("1152921504606846976"),
new BigInteger("2305843009213693952"),
new BigInteger("4611686018427387904"),
new BigInteger("9223372036854775808"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
},
};
public static final BigInteger[][] ROOK_ATTACKS = {
{
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("1"),
new BigInteger("2"),
new BigInteger("4"),
new BigInteger("8"),
new BigInteger("16"),
new BigInteger("32"),
new BigInteger("64"),
new BigInteger("128"),
new BigInteger("257"),
new BigInteger("514"),
new BigInteger("1028"),
new BigInteger("2056"),
new BigInteger("4112"),
new BigInteger("8224"),
new BigInteger("16448"),
new BigInteger("32896"),
new BigInteger("65793"),
new BigInteger("131586"),
new BigInteger("263172"),
new BigInteger("526344"),
new BigInteger("1052688"),
new BigInteger("2105376"),
new BigInteger("4210752"),
new BigInteger("8421504"),
new BigInteger("16843009"),
new BigInteger("33686018"),
new BigInteger("67372036"),
new BigInteger("134744072"),
new BigInteger("269488144"),
new BigInteger("538976288"),
new BigInteger("1077952576"),
new BigInteger("2155905152"),
new BigInteger("4311810305"),
new BigInteger("8623620610"),
new BigInteger("17247241220"),
new BigInteger("34494482440"),
new BigInteger("68988964880"),
new BigInteger("137977929760"),
new BigInteger("275955859520"),
new BigInteger("551911719040"),
new BigInteger("1103823438081"),
new BigInteger("2207646876162"),
new BigInteger("4415293752324"),
new BigInteger("8830587504648"),
new BigInteger("17661175009296"),
new BigInteger("35322350018592"),
new BigInteger("70644700037184"),
new BigInteger("141289400074368"),
new BigInteger("282578800148737"),
new BigInteger("565157600297474"),
new BigInteger("1130315200594948"),
new BigInteger("2260630401189896"),
new BigInteger("4521260802379792"),
new BigInteger("9042521604759584"),
new BigInteger("18085043209519168"),
new BigInteger("36170086419038336")
},
{
new BigInteger("254"),
new BigInteger("252"),
new BigInteger("248"),
new BigInteger("240"),
new BigInteger("224"),
new BigInteger("192"),
new BigInteger("128"),
new BigInteger("0"),
new BigInteger("65024"),
new BigInteger("64512"),
new BigInteger("63488"),
new BigInteger("61440"),
new BigInteger("57344"),
new BigInteger("49152"),
new BigInteger("32768"),
new BigInteger("0"),
new BigInteger("16646144"),
new BigInteger("16515072"),
new BigInteger("16252928"),
new BigInteger("15728640"),
new BigInteger("14680064"),
new BigInteger("12582912"),
new BigInteger("8388608"),
new BigInteger("0"),
new BigInteger("4261412864"),
new BigInteger("4227858432"),
new BigInteger("4160749568"),
new BigInteger("4026531840"),
new BigInteger("3758096384"),
new BigInteger("3221225472"),
new BigInteger("2147483648"),
new BigInteger("0"),
new BigInteger("1090921693184"),
new BigInteger("1082331758592"),
new BigInteger("1065151889408"),
new BigInteger("1030792151040"),
new BigInteger("962072674304"),
new BigInteger("824633720832"),
new BigInteger("549755813888"),
new BigInteger("0"),
new BigInteger("279275953455104"),
new BigInteger("277076930199552"),
new BigInteger("272678883688448"),
new BigInteger("263882790666240"),
new BigInteger("246290604621824"),
new BigInteger("211106232532992"),
new BigInteger("140737488355328"),
new BigInteger("0"),
new BigInteger("71494644084506624"),
new BigInteger("70931694131085312"),
new BigInteger("69805794224242688"),
new BigInteger("67553994410557440"),
new BigInteger("63050394783186944"),
new BigInteger("54043195528445952"),
new BigInteger("36028797018963968"),
new BigInteger("0"),
new BigInteger("18302628885633695744"),
new BigInteger("18158513697557839872"),
new BigInteger("17870283321406128128"),
new BigInteger("17293822569102704640"),
new BigInteger("16140901064495857664"),
new BigInteger("13835058055282163712"),
new BigInteger("9223372036854775808"),
new BigInteger("0")
},
{
new BigInteger("72340172838076672"),
new BigInteger("144680345676153344"),
new BigInteger("289360691352306688"),
new BigInteger("578721382704613376"),
new BigInteger("1157442765409226752"),
new BigInteger("2314885530818453504"),
new BigInteger("4629771061636907008"),
new BigInteger("9259542123273814016"),
new BigInteger("72340172838076416"),
new BigInteger("144680345676152832"),
new BigInteger("289360691352305664"),
new BigInteger("578721382704611328"),
new BigInteger("1157442765409222656"),
new BigInteger("2314885530818445312"),
new BigInteger("4629771061636890624"),
new BigInteger("9259542123273781248"),
new BigInteger("72340172838010880"),
new BigInteger("144680345676021760"),
new BigInteger("289360691352043520"),
new BigInteger("578721382704087040"),
new BigInteger("1157442765408174080"),
new BigInteger("2314885530816348160"),
new BigInteger("4629771061632696320"),
new BigInteger("9259542123265392640"),
new BigInteger("72340172821233664"),
new BigInteger("144680345642467328"),
new BigInteger("289360691284934656"),
new BigInteger("578721382569869312"),
new BigInteger("1157442765139738624"),
new BigInteger("2314885530279477248"),
new BigInteger("4629771060558954496"),
new BigInteger("9259542121117908992"),
new BigInteger("72340168526266368"),
new BigInteger("144680337052532736"),
new BigInteger("289360674105065472"),
new BigInteger("578721348210130944"),
new BigInteger("1157442696420261888"),
new BigInteger("2314885392840523776"),
new BigInteger("4629770785681047552"),
new BigInteger("9259541571362095104"),
new BigInteger("72339069014638592"),
new BigInteger("144678138029277184"),
new BigInteger("289356276058554368"),
new BigInteger("578712552117108736"),
new BigInteger("1157425104234217472"),
new BigInteger("2314850208468434944"),
new BigInteger("4629700416936869888"),
new BigInteger("9259400833873739776"),
new BigInteger("72057594037927936"),
new BigInteger("144115188075855872"),
new BigInteger("288230376151711744"),
new BigInteger("576460752303423488"),
new BigInteger("1152921504606846976"),
new BigInteger("2305843009213693952"),
new BigInteger("4611686018427387904"),
new BigInteger("9223372036854775808"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0"),
new BigInteger("0")
},
{
new BigInteger("0"),
new BigInteger("1"),
new BigInteger("3"),
new BigInteger("7"),
new BigInteger("15"),
new BigInteger("31"),
new BigInteger("63"),
new BigInteger("127"),
new BigInteger("0"),
new BigInteger("256"),
new BigInteger("768"),
new BigInteger("1792"),
new BigInteger("3840"),
new BigInteger("7936"),
new BigInteger("16128"),
new BigInteger("32512"),
new BigInteger("0"),
new BigInteger("65536"),
new BigInteger("196608"),
new BigInteger("458752"),
new BigInteger("983040"),
new BigInteger("2031616"),
new BigInteger("4128768"),
new BigInteger("8323072"),
new BigInteger("0"),
new BigInteger("16777216"),
new BigInteger("50331648"),
new BigInteger("117440512"),
new BigInteger("251658240"),
new BigInteger("520093696"),
new BigInteger("1056964608"),
new BigInteger("2130706432"),
new BigInteger("0"),
new BigInteger("4294967296"),
new BigInteger("12884901888"),
new BigInteger("30064771072"),
new BigInteger("64424509440"),
new BigInteger("133143986176"),
new BigInteger("270582939648"),
new BigInteger("545460846592"),
new BigInteger("0"),
new BigInteger("1099511627776"),
new BigInteger("3298534883328"),
new BigInteger("7696581394432"),
new BigInteger("16492674416640"),
new BigInteger("34084860461056"),
new BigInteger("69269232549888"),
new BigInteger("139637976727552"),
new BigInteger("0"),
new BigInteger("281474976710656"),
new BigInteger("844424930131968"),
new BigInteger("1970324836974592"),
new BigInteger("4222124650659840"),
new BigInteger("8725724278030336"),
new BigInteger("17732923532771328"),
new BigInteger("35747322042253312"),
new BigInteger("0"),
new BigInteger("72057594037927936"),
new BigInteger("216172782113783808"),
new BigInteger("504403158265495552"),
new BigInteger("1080863910568919040"),
new BigInteger("2233785415175766016"),
new BigInteger("4539628424389459968"),
new BigInteger("9151314442816847872")
}
};
public static final BigInteger[] WHITE_PAWN_ATTACKS = {
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(2),
BigInteger.valueOf(5),
BigInteger.valueOf(10),
BigInteger.valueOf(20),
BigInteger.valueOf(40),
BigInteger.valueOf(80),
BigInteger.valueOf(160),
BigInteger.valueOf(64),
BigInteger.valueOf(512),
BigInteger.valueOf(1280),
BigInteger.valueOf(2560),
BigInteger.valueOf(5120),
BigInteger.valueOf(10240),
BigInteger.valueOf(20480),
BigInteger.valueOf(40960),
BigInteger.valueOf(16384),
BigInteger.valueOf(131072),
BigInteger.valueOf(327680),
BigInteger.valueOf(655360),
BigInteger.valueOf(1310720),
BigInteger.valueOf(2621440),
BigInteger.valueOf(5242880),
BigInteger.valueOf(10485760),
BigInteger.valueOf(4194304),
BigInteger.valueOf(33554432),
BigInteger.valueOf(83886080),
BigInteger.valueOf(167772160L),
BigInteger.valueOf(335544320L),
BigInteger.valueOf(671088640L),
BigInteger.valueOf(1342177280L),
BigInteger.valueOf(2684354560L),
BigInteger.valueOf(1073741824L),
BigInteger.valueOf(8589934592L),
BigInteger.valueOf(21474836480L),
BigInteger.valueOf(42949672960L),
BigInteger.valueOf(85899345920L),
BigInteger.valueOf(171798691840L),
BigInteger.valueOf(343597383680L),
BigInteger.valueOf(687194767360L),
BigInteger.valueOf(274877906944L),
BigInteger.valueOf(2199023255552L),
BigInteger.valueOf(5497558138880L),
BigInteger.valueOf(10995116277760L),
BigInteger.valueOf(21990232555520L),
BigInteger.valueOf(43980465111040L),
BigInteger.valueOf(87960930222080L),
BigInteger.valueOf(175921860444160L),
BigInteger.valueOf(70368744177664L),
BigInteger.valueOf(562949953421312L),
BigInteger.valueOf(1407374883553280L),
BigInteger.valueOf(2814749767106560L),
BigInteger.valueOf(5629499534213120L),
BigInteger.valueOf(11258999068426240L),
BigInteger.valueOf(22517998136852480L),
BigInteger.valueOf(45035996273704960L),
BigInteger.valueOf(18014398509481984L)
};
public static final BigInteger[] BLACK_PAWN_ATTACKS = {
BigInteger.valueOf(512),
BigInteger.valueOf(1280),
BigInteger.valueOf(2560),
BigInteger.valueOf(5120),
BigInteger.valueOf(10240),
BigInteger.valueOf(20480),
BigInteger.valueOf(40960),
BigInteger.valueOf(16384),
BigInteger.valueOf(131072),
BigInteger.valueOf(327680),
BigInteger.valueOf(655360),
BigInteger.valueOf(1310720),
BigInteger.valueOf(2621440),
BigInteger.valueOf(5242880),
BigInteger.valueOf(10485760),
BigInteger.valueOf(4194304),
BigInteger.valueOf(33554432),
BigInteger.valueOf(83886080),
BigInteger.valueOf(167772160),
BigInteger.valueOf(335544320),
BigInteger.valueOf(671088640),
BigInteger.valueOf(1342177280),
BigInteger.valueOf(2684354560L),
BigInteger.valueOf(1073741824),
BigInteger.valueOf(8589934592L),
BigInteger.valueOf(21474836480L),
BigInteger.valueOf(42949672960L),
BigInteger.valueOf(85899345920L),
BigInteger.valueOf(171798691840L),
BigInteger.valueOf(343597383680L),
BigInteger.valueOf(687194767360L),
BigInteger.valueOf(274877906944L),
BigInteger.valueOf(2199023255552L),
BigInteger.valueOf(5497558138880L),
BigInteger.valueOf(10995116277760L),
BigInteger.valueOf(21990232555520L),
BigInteger.valueOf(43980465111040L),
BigInteger.valueOf(87960930222080L),
BigInteger.valueOf(175921860444160L),
BigInteger.valueOf(70368744177664L),
BigInteger.valueOf(562949953421312L),
BigInteger.valueOf(1407374883553280L),
BigInteger.valueOf(2814749767106560L),
BigInteger.valueOf(5629499534213120L),
BigInteger.valueOf(11258999068426240L),
BigInteger.valueOf(22517998136852480L),
BigInteger.valueOf(45035996273704960L),
BigInteger.valueOf(18014398509481984L),
BigInteger.valueOf(144115188075855872L),
BigInteger.valueOf(360287970189639680L),
BigInteger.valueOf(720575940379279360L),
BigInteger.valueOf(1441151880758558720L),
BigInteger.valueOf(2882303761517117440L),
BigInteger.valueOf(5764607523034234880L),
new BigInteger("11529215046068469760"),
BigInteger.valueOf(4611686018427387904L),
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(0),
BigInteger.valueOf(0)
};
public static final BigInteger[] KING_ATTACKS = {
new BigInteger("770"),
new BigInteger("1797"),
new BigInteger("3594"),
new BigInteger("7188"),
new BigInteger("14376"),
new BigInteger("28752"),
new BigInteger("57504"),
new BigInteger("49216"),
new BigInteger("197123"),
new BigInteger("460039"),
new BigInteger("920078"),
new BigInteger("1840156"),
new BigInteger("3680312"),
new BigInteger("7360624"),
new BigInteger("14721248"),
new BigInteger("12599488"),
new BigInteger("50463488"),
new BigInteger("117769984"),
new BigInteger("235539968"),
new BigInteger("471079936"),
new BigInteger("942159872"),
new BigInteger("1884319744"),
new BigInteger("3768639488"),
new BigInteger("3225468928"),
new BigInteger("12918652928"),
new BigInteger("30149115904"),
new BigInteger("60298231808"),
new BigInteger("120596463616"),
new BigInteger("241192927232"),
new BigInteger("482385854464"),
new BigInteger("964771708928"),
new BigInteger("825720045568"),
new BigInteger("3307175149568"),
new BigInteger("7718173671424"),
new BigInteger("15436347342848"),
new BigInteger("30872694685696"),
new BigInteger("61745389371392"),
new BigInteger("123490778742784"),
new BigInteger("246981557485568"),
new BigInteger("211384331665408"),
new BigInteger("846636838289408"),
new BigInteger("1975852459884544"),
new BigInteger("3951704919769088"),
new BigInteger("7903409839538176"),
new BigInteger("15806819679076352"),
new BigInteger("31613639358152704"),
new BigInteger("63227278716305408"),
new BigInteger("54114388906344448"),
new BigInteger("216739030602088448"),
new BigInteger("505818229730443264"),
new BigInteger("1011636459460886528"),
new BigInteger("2023272918921773056"),
new BigInteger("4046545837843546112"),
new BigInteger("8093091675687092224"),
new BigInteger("16186183351374184448"),
new BigInteger("13853283560024178688"),
new BigInteger("144959613005987840"),
new BigInteger("362258295026614272"),
new BigInteger("724516590053228544"),
new BigInteger("1449033180106457088"),
new BigInteger("2898066360212914176"),
new BigInteger("5796132720425828352"),
new BigInteger("11592265440851656704"),
new BigInteger("4665729213955833856")
};
public static final BigInteger[] SQUARE_BBS = {
new BigInteger("1"),
new BigInteger("2"),
new BigInteger("4"),
new BigInteger("8"),
new BigInteger("16"),
new BigInteger("32"),
new BigInteger("64"),
new BigInteger("128"),
new BigInteger("256"),
new BigInteger("512"),
new BigInteger("1024"),
new BigInteger("2048"),
new BigInteger("4096"),
new BigInteger("8192"),
new BigInteger("16384"),
new BigInteger("32768"),
new BigInteger("65536"),
new BigInteger("131072"),
new BigInteger("262144"),
new BigInteger("524288"),
new BigInteger("1048576"),
new BigInteger("2097152"),
new BigInteger("4194304"),
new BigInteger("8388608"),
new BigInteger("16777216"),
new BigInteger("33554432"),
new BigInteger("67108864"),
new BigInteger("134217728"),
new BigInteger("268435456"),
new BigInteger("536870912"),
new BigInteger("1073741824"),
new BigInteger("2147483648"),
new BigInteger("4294967296"),
new BigInteger("8589934592"),
new BigInteger("17179869184"),
new BigInteger("34359738368"),
new BigInteger("68719476736"),
new BigInteger("137438953472"),
new BigInteger("274877906944"),
new BigInteger("549755813888"),
new BigInteger("1099511627776"),
new BigInteger("2199023255552"),
new BigInteger("4398046511104"),
new BigInteger("8796093022208"),
new BigInteger("17592186044416"),
new BigInteger("35184372088832"),
new BigInteger("70368744177664"),
new BigInteger("140737488355328"),
new BigInteger("281474976710656"),
new BigInteger("562949953421312"),
new BigInteger("1125899906842624"),
new BigInteger("2251799813685248"),
new BigInteger("4503599627370496"),
new BigInteger("9007199254740992"),
new BigInteger("18014398509481984"),
new BigInteger("36028797018963968"),
new BigInteger("72057594037927936"),
new BigInteger("144115188075855872"),
new BigInteger("288230376151711744"),
new BigInteger("576460752303423488"),
new BigInteger("1152921504606846976"),
new BigInteger("2305843009213693952"),
new BigInteger("4611686018427387904"),
new BigInteger("9223372036854775808"),
};
//#endregion
}

245
Java/MoveUtils.java Normal file
View File

@@ -0,0 +1,245 @@
import java.math.BigInteger;
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 int BitScanForward(BigInteger bitboard)
{
int index = 0;
while (bitboard.and(BigInteger.ONE.shiftLeft(index)).equals(BigInteger.ZERO))
{
index++;
}
return index;
}
public static BigInteger GetRookMovesSeparate(BigInteger combined_occ, int square)
{
BigInteger combinedAttacks = BigInteger.ZERO;
BigInteger rookAttackUp = MoveConstants.ROOK_ATTACKS[ROOK_UP][square];
BigInteger rookAndOccs = rookAttackUp.and(combined_occ);
if (!rookAndOccs.equals(BigInteger.ZERO))
{
BigInteger lastValue = rookAndOccs;
for (int i = 0; i < 8; i++)
{
rookAndOccs = rookAndOccs.and(rookAndOccs.subtract(BigInteger.ONE));
if (rookAndOccs.equals(BigInteger.ZERO))
{
int endSquare = BitScanForward(lastValue); // Implement this method
combinedAttacks = combinedAttacks.or(Inb.INBETWEEN_BITBOARDS[square][endSquare]);
break;
}
lastValue = rookAndOccs;
}
}
else
{
combinedAttacks = combinedAttacks.or(rookAttackUp);
}
// Pr.println("Rook up");
//Pr.printBigIntegerLn(combinedAttacks);
BigInteger rookAttackLeft = MoveConstants.ROOK_ATTACKS[ROOK_LEFT][square];
rookAndOccs = rookAttackLeft.and(combined_occ);
if (!rookAndOccs.equals(BigInteger.ZERO))
{
BigInteger lastValue = rookAndOccs;
for (int i = 0; i < 8; i++)
{
rookAndOccs = rookAndOccs.and(rookAndOccs.subtract(BigInteger.ONE));
if (rookAndOccs.equals(BigInteger.ZERO))
{
int endSquare = BitScanForward(lastValue); // Implement this method
combinedAttacks = combinedAttacks.or(Inb.INBETWEEN_BITBOARDS[square][endSquare]);
break;
}
lastValue = rookAndOccs;
}
}
else
{
combinedAttacks = combinedAttacks.or(rookAttackLeft);
}
//Pr.println("Rook left");
//Pr.printBigIntegerLn(combinedAttacks);
BigInteger rookAttackDown = MoveConstants.ROOK_ATTACKS[ROOK_DOWN][square];
rookAndOccs = rookAttackDown.and(combined_occ);
if (!rookAndOccs.equals(BigInteger.ZERO))
{
int endSquare = BitScanForward(rookAndOccs); // Implement this method
combinedAttacks = combinedAttacks.or(Inb.INBETWEEN_BITBOARDS[square][endSquare]);
}
else
{
combinedAttacks = combinedAttacks.or(rookAttackDown);
}
// Pr.println("Rook down");
// Pr.printBigIntegerLn(combinedAttacks);
BigInteger rookAttackRight = MoveConstants.ROOK_ATTACKS[ROOK_RIGHT][square];
rookAndOccs = rookAttackRight.and(combined_occ);
if (!rookAndOccs.equals(BigInteger.ZERO))
{
int endSquare = BitScanForward(rookAndOccs); // Implement this method
combinedAttacks = combinedAttacks.or(Inb.INBETWEEN_BITBOARDS[square][endSquare]);
}
else
{
combinedAttacks = combinedAttacks.or(rookAttackRight);
}
// Pr.println("Rook right");
// Pr.printBigIntegerLn(combinedAttacks);
return combinedAttacks;
}
public static BigInteger GetBishopMovesSeparate(BigInteger combined_occ, int square)
{
//Pr.printIntLn(square);
//Pr.printSquareLn(square);
BigInteger combinedAttacks = BigInteger.ZERO;
BigInteger bishopAttackUpLeft = MoveConstants.BISHOP_ATTACKS[BISHOP_UP_LEFT][square];
BigInteger bishopAndOccs = bishopAttackUpLeft.and(combined_occ);
if (!bishopAndOccs.equals(BigInteger.ZERO)) {
BigInteger lastValue = bishopAndOccs;
for (int i = 0; i < 8; i++) {
bishopAndOccs = bishopAndOccs.and(bishopAndOccs.subtract(BigInteger.ONE));
if (bishopAndOccs.equals(BigInteger.ZERO)) {
int endSquare = BitScanForward(lastValue); // Implement this method
combinedAttacks = combinedAttacks.or(Inb.INBETWEEN_BITBOARDS[square][endSquare]);
break;
}
lastValue = bishopAndOccs;
}
} else {
combinedAttacks = combinedAttacks.or(bishopAttackUpLeft);
}
// Pr.println("Bishop up left");
//Pr.printBigIntegerLn(combinedAttacks);
BigInteger bishopAttackUpRight = MoveConstants.BISHOP_ATTACKS[BISHOP_UP_RIGHT][square];
bishopAndOccs = bishopAttackUpRight.and(combined_occ);
if (!bishopAndOccs.equals(BigInteger.ZERO)) {
BigInteger lastValue = bishopAndOccs;
for (int i = 0; i < 8; i++) {
bishopAndOccs = bishopAndOccs.and(bishopAndOccs.subtract(BigInteger.ONE));
if (bishopAndOccs.equals(BigInteger.ZERO)) {
int endSquare = BitScanForward(lastValue); // Implement this method
combinedAttacks = combinedAttacks.or(Inb.INBETWEEN_BITBOARDS[square][endSquare]);
break;
}
lastValue = bishopAndOccs;
}
} else {
combinedAttacks = combinedAttacks.or(bishopAttackUpRight);
}
// Pr.println("Bishop up right");
// Pr.printBigIntegerLn(combinedAttacks);
BigInteger bishopAttackDownLeft = MoveConstants.BISHOP_ATTACKS[BISHOP_DOWN_LEFT][square];
// Pr.println("down left bitboard");
// Pr.printBigIntegerLn(bishopAttackDownLeft);
// Pr.println("__________");
bishopAndOccs = bishopAttackDownLeft.and(combined_occ);
if (!bishopAndOccs.equals(BigInteger.ZERO)) {
int endSquare = BitScanForward(bishopAndOccs); // Implement this method
combinedAttacks = combinedAttacks.or(Inb.INBETWEEN_BITBOARDS[square][endSquare]);
} else {
combinedAttacks = combinedAttacks.or(bishopAttackDownLeft);
}
// Pr.println("Bishop down left");
// Pr.printBigIntegerLn(combinedAttacks);
BigInteger bishopAttackDownRight = MoveConstants.BISHOP_ATTACKS[BISHOP_DOWN_RIGHT][square];
bishopAndOccs = bishopAttackDownRight.and(combined_occ);
if (!bishopAndOccs.equals(BigInteger.ZERO)) {
int endSquare = BitScanForward(bishopAndOccs); // Implement this method
combinedAttacks = combinedAttacks.or(Inb.INBETWEEN_BITBOARDS[square][endSquare]);
} else {
combinedAttacks = combinedAttacks.or(bishopAttackDownRight);
}
// Pr.println("Bishop down right");
// Pr.printBigIntegerLn(combinedAttacks);
return combinedAttacks;
}
public static Boolean Is_Square_Attacked_By_Black_Global(int square, BigInteger occupancy)
{
if (Board.bitboard_array_global[GenConst.BP].and(MoveConstants.WHITE_PAWN_ATTACKS[square]).signum() != 0) {
return true;
}
if (Board.bitboard_array_global[GenConst.BN].and(MoveConstants.KNIGHT_ATTACKS[square]).signum() != 0) {
return true;
}
if (Board.bitboard_array_global[GenConst.BK].and(MoveConstants.KING_ATTACKS[square]).signum() != 0) {
return true;
}
BigInteger bishopAttacks = MoveUtils.GetBishopMovesSeparate(occupancy, square);
if (Board.bitboard_array_global[GenConst.BB].and(bishopAttacks).signum() != 0) {
return true;
}
if (Board.bitboard_array_global[GenConst.BQ].and(bishopAttacks).signum() != 0) {
return true;
}
BigInteger rookAttacks = MoveUtils.GetRookMovesSeparate(occupancy, square);
if (Board.bitboard_array_global[GenConst.BR].and(rookAttacks).signum() != 0) {
return true;
}
if (Board.bitboard_array_global[GenConst.BQ].and(rookAttacks).signum() != 0) {
return true;
}
return false;
}
public static Boolean Is_Square_Attacked_By_White_Global(int square, BigInteger occupancy)
{
if (Board.bitboard_array_global[GenConst.WP].and(MoveConstants.BLACK_PAWN_ATTACKS[square]).signum() != 0) {
return true;
}
if (Board.bitboard_array_global[GenConst.WN].and(MoveConstants.KNIGHT_ATTACKS[square]).signum() != 0) {
return true;
}
if (Board.bitboard_array_global[GenConst.WK].and(MoveConstants.KING_ATTACKS[square]).signum() != 0) {
return true;
}
BigInteger bishopAttacks = MoveUtils.GetBishopMovesSeparate(occupancy, square);
if (Board.bitboard_array_global[GenConst.WB].and(bishopAttacks).signum() != 0) {
return true;
}
if (Board.bitboard_array_global[GenConst.WQ].and(bishopAttacks).signum() != 0) {
return true;
}
BigInteger rookAttacks = MoveUtils.GetRookMovesSeparate(occupancy, square);
if (Board.bitboard_array_global[GenConst.WR].and(rookAttacks).signum() != 0) {
return true;
}
if (Board.bitboard_array_global[GenConst.WQ].and(rookAttacks).signum() != 0) {
return true;
}
return false;
}
}

4133
Java/Perft.java Normal file

File diff suppressed because it is too large Load Diff

39
Java/Pr.java Normal file
View File

@@ -0,0 +1,39 @@
import java.math.BigInteger;
public class Pr {
public static void print(String input)
{
System.out.print(input);
}
public static void println(String input)
{
System.out.println(input);
}
public static void printInt(int input)
{
System.out.print(input);
}
public static void printIntLn(int input)
{
System.out.println(input);
}
public static void printBigInteger(BigInteger input)
{
System.out.print(input);
}
public static void printBigIntegerLn(BigInteger input)
{
System.out.println(input);
}
public static void printSquareLn(int input)
{
assert input >= 0 && input < 64 : "Invalid square: " + input;
System.out.print(GenConst.SQ_CHAR_X[input]);
System.out.println(GenConst.SQ_CHAR_Y[input]);
}
}

72
Java/Testing.java Normal file
View File

@@ -0,0 +1,72 @@
import java.math.BigInteger;
public class Testing
{
public static void testRookMoves()
{
int rookSquare = 36;
BigInteger WP_STARTING_POSITIONS = new BigInteger("71776119061217280");
BigInteger BP_STARTING_POSITIONS = new BigInteger("65280");
BigInteger COMBINED_OCC = WP_STARTING_POSITIONS.or(BP_STARTING_POSITIONS);
BigInteger rookMoves = MoveUtils.GetRookMovesSeparate(COMBINED_OCC, rookSquare);
Bitboard.printBigInteger(rookMoves);
}
public static void TestKnightMoves()
{
BigInteger MAX_BIGINT = new BigInteger("18446744073709551615"); // Max u64 value
BigInteger knightBitboard = BigInteger.ZERO;
knightBitboard = knightBitboard.setBit(45);
knightBitboard = knightBitboard.setBit(42);
Bitboard.printBigInteger(knightBitboard);
Bitboard.printBigInteger(MAX_BIGINT);
BigInteger tempBitboard = knightBitboard;
while (!tempBitboard.equals(BigInteger.ZERO))
{
int knightSquare = Bitboard.bitScanForwardSlow(tempBitboard);
tempBitboard = tempBitboard.clearBit(knightSquare);
Pr.println("Knight square: " + knightSquare);
if (knightSquare == -1)
{
Pr.println("Error knight sq -1");
break;
}
BigInteger knightAttacks = MoveConstants.KNIGHT_ATTACKS[knightSquare];
Pr.println("Knight on square " + knightSquare);
Bitboard.printBigInteger(knightAttacks);
}
}
public static void printRookMoves()
{
for (int direction = 0; direction < 4; direction++)
{
Pr.println("direction: " + direction);
for (int sq = 0; sq < 64; sq++)
{
Bitboard.printBigInteger(MoveConstants.ROOK_ATTACKS[direction][sq]);
}
}
}
public static void printBishopMoves()
{
for (int direction = 0; direction < 4; direction++)
{
Pr.println("direction: " + direction);
for (int sq = 0; sq < 64; sq++)
{
Bitboard.printBigInteger(MoveConstants.BISHOP_ATTACKS[direction][sq]);
}
}
}
}