📄 premovenodesgen.java
字号:
if (InBoard(i + k, j + l) && (j >= 5 && j + l >= 5 || j <= 4 && j + l <= 4)) {
BishopMoves[i * 10 + j][Index] = (i + k) * 10 + j + l;
ElephantEyes[i * 10 + j][Index] = (i + k / 2) * 10 + j + l / 2;
Index ++;
}
}
}
}
BishopMoves[i * 10 + j][Index] = -1;
// 马Nodes
Index = 0;
for (k = -1; k <= 1; k += 2) {
for (l = -2; l <= 2; l += 4) {
if (InBoard(i + k, j + l)) {
KnightMoves[i * 10 + j][Index] = (i + k) * 10 + j + l;
HorseLegs[i * 10 + j][Index] = i * 10 + j + l / 2;
Index ++;
}
if (InBoard(i + l, j + k)) {
KnightMoves[i * 10 + j][Index] = (i + l) * 10 + j + k;
HorseLegs[i * 10 + j][Index] = (i + l / 2) * 10 + j;
Index ++;
}
}
}
KnightMoves[i * 10 + j][Index] = -1;
// 兵Nodes
for (k = 0; k <= 1; k ++) {
Index = 0;
if (InBoard(i, k==1 ? j - 1 : j + 1)) {
PawnMoves[i * 10 + j][k][Index] = (k==1 ? i * 10 + j - 1 : i * 10 + j + 1);
Index ++;
}
if (k==1 ? j <= 4 : j >= 5) {
for (l = -1; l <= 1; l += 2) {
if (InBoard(i + l, j)) {
PawnMoves[i * 10 + j][k][Index] = (i + l) * 10 + j;
Index ++;
}
}
}
PawnMoves[i * 10 + j][k][Index] = -1;
}
}//end of j loop
}//end of i loop
// Generate FilePreMoveNodes for Rooks and Cannons
for (i = 0; i < 10; i ++) {
for (j = 0; j < 1024; j ++) {
Index = 0;
FileNonCapMax[i][j] = i;
for (k = i + 1; k <= 9; k ++) {
if ((j & (1 << k))!=0) {
break;
}
FileNonCapMoves[i][j][Index] = k;
Index ++;
FileNonCapMax[i][j] = k;
}
FileNonCapMin[i][j] = i;
for (k = i - 1; k >= 0; k --) {
if ((j & (1 << k))!=0) {
break;
}
FileNonCapMoves[i][j][Index] = k;
Index ++;
FileNonCapMin[i][j] = k;
}
FileNonCapMoves[i][j][Index] = -1;
Index = 0;
FileRookCapMax[i][j] = i;
for (k = i + 1; k <= 9; k ++) {
if ((j & (1 << k))!=0) {
FileRookCapMoves[i][j][Index] = k;
Index ++;
FileRookCapMax[i][j] = k;
break;
}
}
FileRookCapMin[i][j] = i;
for (k = i - 1; k >= 0; k --) {
if ((j & (1 << k))!=0) {
FileRookCapMoves[i][j][Index] = k;
Index ++;
FileRookCapMin[i][j] = k;
break;
}
}
FileRookCapMoves[i][j][Index] = -1;
Index = 0;
FileCannonCapMax[i][j] = i;
for (k = i + 1; k <= 9; k ++) {
if ((j & (1 << k))!=0) {
k ++;
break;
}
}
for (; k <= 9; k ++) {
if ((j & (1 << k))!=0) {
FileCannonCapMoves[i][j][Index] = k;
Index ++;
FileCannonCapMax[i][j] = k;
break;
}
}
FileCannonCapMin[i][j] = i;
for (k = i - 1; k >= 0; k --) {
if ((j & (1 << k))!=0) {
k --;
break;
}
}
for (; k >= 0; k --) {
if ((j & (1 << k))!=0) {
FileCannonCapMoves[i][j][Index] = k;
Index ++;
FileCannonCapMin[i][j] = k;
break;
}
}
FileCannonCapMoves[i][j][Index] = -1;
}
}
// Generate RankPreMoveNodes for Rooks and Cannons
for (i = 0; i < 9; i ++) {
for (j = 0; j < 512; j ++) {
Index = 0;
RankNonCapMax[i][j] = (i * 10);
for (k = i + 1; k <= 8; k ++) {
if ((j & (1 << k))!=0) {
break;
}
RankNonCapMoves[i][j][Index] = (k * 10);
Index ++;
RankNonCapMax[i][j] = (k * 10);
}
RankNonCapMin[i][j] = (i * 10);
for (k = i - 1; k >= 0; k --) {
if ((j & (1 << k))!=0) {
break;
}
RankNonCapMoves[i][j][Index] = (k * 10);
Index ++;
RankNonCapMin[i][j] = (k * 10);
}
RankNonCapMoves[i][j][Index] = -1;
Index = 0;
RankRookCapMax[i][j] = (i * 10);
for (k = i + 1; k <= 8; k ++) {
if ((j & (1 << k))!=0) {
RankRookCapMoves[i][j][Index] = (k * 10);
Index ++;
RankRookCapMax[i][j] = (k * 10);
break;
}
}
RankRookCapMin[i][j] = (i * 10);
for (k = i - 1; k >= 0; k --) {
if ((j & (1 << k))!=0) {
RankRookCapMoves[i][j][Index] = (k * 10);
Index ++;
RankRookCapMin[i][j] = (k * 10);
break;
}
}
RankRookCapMoves[i][j][Index] = -1;
Index = 0;
RankCannonCapMax[i][j] = (i * 10);
for (k = i + 1; k <= 8; k ++) {
if ((j & (1 << k))!=0) {
k ++;
break;
}
}
for (; k <= 8; k ++) {
if ((j & (1 << k))!=0) {
RankCannonCapMoves[i][j][Index] = (k * 10);
Index ++;
RankCannonCapMax[i][j] = (k * 10);
break;
}
}
RankCannonCapMin[i][j] = (i * 10);
for (k = i - 1; k >= 0; k --) {
if ((j & (1 << k))!=0) {
k --;
break;
}
}
for (; k >= 0; k --) {
if ((j & (1 << k))!=0) {
RankCannonCapMoves[i][j][Index] = (k * 10);
Index ++;
RankCannonCapMin[i][j] = (k * 10);
break;
}
}
RankCannonCapMoves[i][j][Index] = -1;
}
}
return;
}
//for test
public static void main(String[] args) throws IOException{
System.out.println("-------------------------------------");
//System.out.println("KnightMoves[44][i]:");
//for(int i=0;i<12;i++)
// System.out.print((int)KnightMoves[44][i]+" ");
//System.out.println("\nKnightMoves[44][i](Knight Leg):");
//for(int i=0;i<8;i++)
// System.out.print((int)HorseLegs[44][i]+" ");
//System.out.println("\nFileNonCapMoves[2][0][i]:");
//for(int i=0;i<12;i++)
// System.out.print((int)FileNonCapMoves[2][0][i]+" ");
//System.out.println("\nFileNonCapMoves[2][129][i]:");
//for(int i=0;i<12;i++)
// System.out.print((int)FileNonCapMoves[2][129][i]+" ");
//System.out.println("\nFileCannonCapMoves[2][129][i]:");
//for(int i=0;i<4;i++)
// System.out.print((int)FileCannonCapMoves[2][224][i]+" ");
//for(int i=0;i<18;i++){
//System.out.println("\nPawnCheck["+i+"]");
//System.out.println(PawnCheck[i]);
//}
//for(int i=50;i<80;i++){
//System.out.println("\nKnightPinCheck[8]["+i+"]");
//System.out.println(KnightPinCheck[8][i]);
//System.out.println(CheckLegs[i]);
//System.out.println(BitBoard.CheckSum(CheckLegs[i]));
//System.out.println(BitMask[i]);
//}
//System.in.read();
for (int i=0;i<18;i++){
System.out.println(i);
System.out.println(CheckLegs[i]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -