// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: packimports(3) // Source File Name: FusionCh.java import java.applet.Applet; import java.awt.*; import java.io.PrintStream; public class FusionCh extends Applet { public FusionCh() { } public void SomethingElseForTotalBackBoard() { } public void SomethingElseForTotalSaveBoard() { } public void SomethingElseForUnBackBoard() { } public void SomethingElseForLoadSavedBoard() { } public boolean SomeInitialConditionForKeydown(){ if (AskAboutSeparation==true){return true;} return false; } public boolean keyDown(Event e, int k) { if (humanizing==true){return false;} if (SomeInitialConditionForKeydown()==true){return true;} Graphics g=getGraphics(); oopsKey=getParameter("OOPS").charAt(0); saveKey=getParameter("SAVE").charAt(0); loadKey=getParameter("LOAD").charAt(0); if (k==oopsKey) { PromotingAPawn=false; GameOver=false; UnBackBoard();TotalMaybeBoard(NowBoard, MaybeBoard); markingAPiece=true; whoseMove=who_backed; SayWhoIsHuman(g); whatpiecescanmove(g); TotalMaybeBoard(NowBoard, MaybeBoard); GenerateAttackersArrays(); CountAllThePieces(); DrawNowBoard(g); return true; } if (k==saveKey) { TotalSaveBoard();TotalMaybeBoard(NowBoard, MaybeBoard); who_saved=whoseMove; } if (k==loadKey) { PromotingAPawn=false; GameOver=false; LoadSavedBoard();TotalMaybeBoard(NowBoard, MaybeBoard); markingAPiece=true; whoseMove=who_backed; SayWhoIsHuman(g); whatpiecescanmove(g); TotalMaybeBoard(NowBoard, MaybeBoard); GenerateAttackersArrays(); CountAllThePieces(); DrawNowBoard(g); return true; } System.out.println("kurwa"); return false; } public void TotalBackBoard(){back_turncounter=turncounter;back_fifty_move_rule=fifty_move_rule; for(xxx=0; xxx < 9; xxx++) for(yyy=0; yyy < 9; yyy++) { BackBoard.sq_[yyy][xxx].side_=NowBoard.sq_[yyy][xxx].side_; BackBoard.sq_[yyy][xxx].piece_=NowBoard.sq_[yyy][xxx].piece_; SomethingElseForTotalBackBoard(); } } public void TotalSaveBoard(){saved_fifty_move_rule=fifty_move_rule;saved_turncounter=turncounter; for(xxx=0; xxx < 9; xxx++) for(yyy=0; yyy < 9; yyy++) { SaveBoard.sq_[yyy][xxx].side_=NowBoard.sq_[yyy][xxx].side_; SaveBoard.sq_[yyy][xxx].piece_=NowBoard.sq_[yyy][xxx].piece_; SomethingElseForTotalSaveBoard(); } } public void UnBackBoard(){turncounter=back_turncounter;fifty_move_rule=back_fifty_move_rule;ShowStatusNothing(); for(xxx=0; xxx < 9; xxx++) for(yyy=0; yyy < 9; yyy++) { NowBoard.sq_[yyy][xxx].side_=BackBoard.sq_[yyy][xxx].side_; NowBoard.sq_[yyy][xxx].piece_=BackBoard.sq_[yyy][xxx].piece_; SomethingElseForUnBackBoard(); } } public void LoadSavedBoard(){turncounter=saved_turncounter;fifty_move_rule=saved_fifty_move_rule;ShowStatusNothing(); for(xxx=0; xxx < 9; xxx++) for(yyy=0; yyy < 9; yyy++) { NowBoard.sq_[yyy][xxx].side_=SaveBoard.sq_[yyy][xxx].side_; NowBoard.sq_[yyy][xxx].piece_=SaveBoard.sq_[yyy][xxx].piece_; SomethingElseForLoadSavedBoard(); } } public void ShowStatusQ(String stringo){ if (turncounter==0){showStatus(stringo);return;} showStatus(stringo+" ["+turncounter+"]"); } public boolean IsThisAGoodMove(){ if (goodmove10==moveCounter){return true;} if (goodmove9==moveCounter){return true;} if (goodmove8==moveCounter){return true;} if (goodmove7==moveCounter){return true;} if (goodmove6==moveCounter){return true;} if (goodmove5==moveCounter){return true;} if (goodmove4==moveCounter){return true;} if (goodmove3==moveCounter){return true;} if (goodmove2==moveCounter){return true;} if (goodmove1==moveCounter){return true;} return false; } public boolean WinsAnotherWay(Chsq chsq){return false;} public void NegateGMCounts(){GM1count=0;GM2count=0;GM3count=0;GM4count=0;GM5count=0;GM6count=0;GM7count=0;GM8count=0;GM9count=0;GM10count=0;} public void AssignGoodMove1(){GM1count++;if ((Math.random()*GM1count<1)|(GM1count==1)){goodmove1 = moveCounter;}} public void AssignGoodMove2(){GM2count++;if ((Math.random()*GM2count<1)|(GM2count==1)){goodmove2 = moveCounter;}} public void AssignGoodMove3(){GM3count++;if ((Math.random()*GM3count<1)|(GM3count==1)){goodmove3 = moveCounter;}} public void AssignGoodMove4(){GM4count++;if ((Math.random()*GM4count<1)|(GM4count==1)){goodmove4 = moveCounter;}} public void AssignGoodMove5(){GM5count++;if ((Math.random()*GM5count<1)|(GM5count==1)){goodmove5 = moveCounter;}} public void AssignGoodMove6(){GM6count++;if ((Math.random()*GM6count<1)|(GM6count==1)){goodmove6 = moveCounter;}} public void AssignGoodMove7(){GM7count++;if ((Math.random()*GM7count<1)|(GM7count==1)){goodmove7 = moveCounter;}} public void AssignGoodMove8(){GM8count++;if ((Math.random()*GM8count<1)|(GM8count==1)){goodmove8 = moveCounter;}} public void AssignGoodMove9(){GM9count++;if ((Math.random()*GM9count<1)|(GM9count==1)){goodmove9 = moveCounter;}} public void AssignGoodMove10(){GM10count++;if ((Math.random()*GM10count<1)|(GM10count==1)){goodmove10 = moveCounter;}} public void start(){ if (NowBoard==null){init();repaint();ShowStatusQ("Applet Re-Started");} } public void AddACLCAttacker() { if((xatt == catt) & (yatt == datt)) return; if((catt > 8) | (datt > 8) | (catt < 1) | (datt < 1)) return; if(satt > 2) { return; } else { CLCAttackers[datt][catt][satt]++; return; } } public void AddAnAttacker() { if((xatt == catt) & (yatt == datt)) return; if((catt > 8) | (datt > 8) | (catt < 1) | (datt < 1)) { return; } else { Attackers[datt][catt][satt]=Attackers[datt][catt][satt] + 1; if (StrongestAttacker[datt][catt][satt]NowBoard.sq_[yatt][xatt].strength()) | (WeakestAttacker[datt][catt][satt]==0)) {WeakestAttacker[datt][catt][satt]=NowBoard.sq_[yatt][xatt].strength();} return; } } public boolean AmIUnderAttack(int i, int j, int k) { if(SupplementalAmIUnderAttackers(i, j, k)) return true; cc=j + 1; dd=i; while(cc < 9) if(MaybeBoard.sq_[dd][cc].side_ == k) { cc=10; } else { if(IsEnemyRook(dd, cc)) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) cc=10; cc++; } cc=j - 1; dd=i; while(cc > 0) if(MaybeBoard.sq_[dd][cc].side_ == k) { cc=-1; } else { if(IsEnemyRook(dd, cc)) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) cc=-1; cc--; } cc=j; for(dd=i + 1; dd < 9;) if(MaybeBoard.sq_[dd][cc].side_ == k) { dd=10; } else { if(IsEnemyRook(dd, cc)) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) dd=10; dd++; } cc=j; for(dd=i - 1; dd > 0;) if(MaybeBoard.sq_[dd][cc].side_ == k) { dd=-1; } else { if(IsEnemyRook(dd, cc)) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) dd=-1; dd--; } cc=j + 1; for(dd=i + 1; (cc < 9) & (dd < 9);) if(MaybeBoard.sq_[dd][cc].side_ == k) { cc=10; } else { if(IsEnemyBishop(dd, cc)) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) cc=10; cc++; dd++; } cc=j + 1; for(dd=i - 1; (cc < 9) & (dd > 0);) if(MaybeBoard.sq_[dd][cc].side_ == k) { cc=10; } else { if(IsEnemyBishop(dd, cc)) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) cc=10; cc++; dd--; } cc=j - 1; for(dd=i + 1; (cc > 0) & (dd < 9);) if(MaybeBoard.sq_[dd][cc].side_ == k) { cc=-1; } else { if(IsEnemyBishop(dd, cc)) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) cc=-1; cc--; dd++; } cc=j - 1; for(dd=i - 1; (cc > 0) & (dd > 0);) if(MaybeBoard.sq_[dd][cc].side_ == k) { cc=-1; } else { if(IsEnemyBishop(dd, cc)) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) cc=-1; cc--; dd--; } cc=j - 1; dd=i - 1; if(IsEnemyKing(dd, cc, k)) return true; cc=j - 1; dd=i; if(IsEnemyKing(dd, cc, k)) return true; cc=j - 1; dd=i + 1; if(IsEnemyKing(dd, cc, k)) return true; cc=j; dd=i - 1; if(IsEnemyKing(dd, cc, k)) return true; cc=j; dd=i + 1; if(IsEnemyKing(dd, cc, k)) return true; cc=j + 1; dd=i - 1; if(IsEnemyKing(dd, cc, k)) return true; cc=j + 1; dd=i; if(IsEnemyKing(dd, cc, k)) return true; cc=j + 1; dd=i + 1; if(IsEnemyKing(dd, cc, k)) return true; cc=j - 2; dd=i - 1; if(IsEnemyKnight(dd, cc, k)) return true; cc=j - 2; dd=i + 1; if(IsEnemyKnight(dd, cc, k)) return true; cc=j + 2; dd=i - 1; if(IsEnemyKnight(dd, cc, k)) return true; cc=j + 2; dd=i + 1; if(IsEnemyKnight(dd, cc, k)) return true; cc=j - 1; dd=i - 2; if(IsEnemyKnight(dd, cc, k)) return true; cc=j - 1; dd=i + 2; if(IsEnemyKnight(dd, cc, k)) return true; cc=j + 1; dd=i - 2; if(IsEnemyKnight(dd, cc, k)) return true; cc=j + 1; dd=i + 2; if(IsEnemyKnight(dd, cc, k)) return true; if(k != 1) { cc=j + 1; dd=i - 1; if(IsEnemyPawn(dd, cc, k)) return true; cc=j - 1; dd=i - 1; if(IsEnemyPawn(dd, cc, k)) return true; } if(k != 2) { cc=j + 1; dd=i + 1; if(IsEnemyPawn(dd, cc, k)) return true; cc=j - 1; dd=i + 1; if(IsEnemyPawn(dd, cc, k)) return true; } return false; } public boolean AmIUnderSparrowAttack(int i, int j, int k) { if(SupplementalAmIUnderSparrowAttackers(i, j, k)) return true; cc=j + 1; dd=i; while(cc < 9) if(MaybeBoard.sq_[dd][cc].side_ == k) { cc=10; } else { if(IsEnemyRook(dd, cc) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) cc=10; cc++; } cc=j - 1; dd=i; while(cc > 0) if(MaybeBoard.sq_[dd][cc].side_ == k) { cc=-1; } else { if(IsEnemyRook(dd, cc) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) cc=-1; cc--; } cc=j; for(dd=i + 1; dd < 9;) if(MaybeBoard.sq_[dd][cc].side_ == k) { dd=10; } else { if(IsEnemyRook(dd, cc) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) dd=10; dd++; } cc=j; for(dd=i - 1; dd > 0;) if(MaybeBoard.sq_[dd][cc].side_ == k) { dd=-1; } else { if(IsEnemyRook(dd, cc) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) dd=-1; dd--; } cc=j + 1; for(dd=i + 1; (cc < 9) & (dd < 9);) if(MaybeBoard.sq_[dd][cc].side_ == k) { cc=10; } else { if(IsEnemyBishop(dd, cc) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) cc=10; cc++; dd++; } cc=j + 1; for(dd=i - 1; (cc < 9) & (dd > 0);) if(MaybeBoard.sq_[dd][cc].side_ == k) { cc=10; } else { if(IsEnemyBishop(dd, cc) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) cc=10; cc++; dd--; } cc=j - 1; for(dd=i + 1; (cc > 0) & (dd < 9);) if(MaybeBoard.sq_[dd][cc].side_ == k) { cc=-1; } else { if(IsEnemyBishop(dd, cc) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) cc=-1; cc--; dd++; } cc=j - 1; for(dd=i - 1; (cc > 0) & (dd > 0);) if(MaybeBoard.sq_[dd][cc].side_ == k) { cc=-1; } else { if(IsEnemyBishop(dd, cc) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(MaybeBoard.sq_[dd][cc].piece_ != 0) cc=-1; cc--; dd--; } cc=j - 1; dd=i - 1; if(IsEnemyKing(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 1; dd=i; if(IsEnemyKing(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 1; dd=i + 1; if(IsEnemyKing(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j; dd=i - 1; if(IsEnemyKing(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j; dd=i + 1; if(IsEnemyKing(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 1; dd=i - 1; if(IsEnemyKing(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 1; dd=i; if(IsEnemyKing(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 1; dd=i + 1; if(IsEnemyKing(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 2; dd=i - 1; if(IsEnemyKnight(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 2; dd=i + 1; if(IsEnemyKnight(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 2; dd=i - 1; if(IsEnemyKnight(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 2; dd=i + 1; if(IsEnemyKnight(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 1; dd=i - 2; if(IsEnemyKnight(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 1; dd=i + 2; if(IsEnemyKnight(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 1; dd=i - 2; if(IsEnemyKnight(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 1; dd=i + 2; if(IsEnemyKnight(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(k != 1) { cc=j + 1; dd=i - 1; if(IsEnemyPawn(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 1; dd=i - 1; if(IsEnemyPawn(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; } if(k != 2) { cc=j + 1; dd=i + 1; if(IsEnemyPawn(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 1; dd=i + 1; if(IsEnemyPawn(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; } return false; } public boolean AmIWorried(int i) { if((skipDtGM) | (depth > 1)) return false; if(i != whoseMove) return false; for(xxx=1; xxx < 9; xxx++) for(yyy=1; yyy < 9; yyy++) if((MaybeBoard.sq_[yyy][xxx].side_ == i) & (MaybeBoard.sq_[yyy][xxx].strength() > 1) & (MaybeBoard.sq_[yyy][xxx].strength() > NowBoard.sq_[d[depth]][c[depth]].strength()) && AmIUnderSparrowAttack(yyy, xxx, i)) return true; return false; } public boolean AnotherWayToEndGame(Graphics g, int i) { return false; } public void Archives() { ArchiveCounter=0; for(ff=1; ff < 9; ff++) for(ee=1; ee < 9; ee++) { ArchiveBoard[fifty_move_rule].sq_[ff][ee].piece_=NowBoard.sq_[ff][ee].piece_; ArchiveBoard[fifty_move_rule].sq_[ff][ee].side_=NowBoard.sq_[ff][ee].side_; } ArchiveBoard[fifty_move_rule].sq_[0][0].side_=whoseMove; for(xxx=0; xxx < fifty_move_rule; xxx++) { if(DoesArchiveMatchNowBoard()) ArchiveCounter++; if(ArchiveCounter > 1) { drawn_games++; ShowStatusQ("Draw By Repetition"); GameOver=true; return; } } } public void CastleStuff(Graphics g) { if(NowBoard.sq_[moveto_rank][moveto_file].piece_ == -2) { if(moveto_file == 7) { ShowStatusQ("Castling King Side"); NowBoard.sq_[moveto_rank][6].side_=NowBoard.sq_[mover_rank][mover_file].side_; NowBoard.sq_[moveto_rank][6].piece_=5; NowBoard.sq_[moveto_rank][8].side_=0; NowBoard.sq_[moveto_rank][8].piece_=0; NowBoard.sq_[moveto_rank][6].drawchsq(g, 1, false); NowBoard.sq_[moveto_rank][8].drawchsq(g, 1, false); MaybeBoard.sq_[moveto_rank][6].side_=NowBoard.sq_[mover_rank][mover_file].side_; MaybeBoard.sq_[moveto_rank][6].piece_=5; MaybeBoard.sq_[moveto_rank][8].side_=0; MaybeBoard.sq_[moveto_rank][8].piece_=0; } if(moveto_file == 3) { ShowStatusQ("Castling Queen Side"); NowBoard.sq_[moveto_rank][4].side_=NowBoard.sq_[mover_rank][mover_file].side_; NowBoard.sq_[moveto_rank][4].piece_=5; NowBoard.sq_[moveto_rank][1].side_=0; NowBoard.sq_[moveto_rank][1].piece_=0; NowBoard.sq_[moveto_rank][4].drawchsq(g, 1, false); NowBoard.sq_[moveto_rank][1].drawchsq(g, 1, false); MaybeBoard.sq_[moveto_rank][4].side_=NowBoard.sq_[mover_rank][mover_file].side_; MaybeBoard.sq_[moveto_rank][4].piece_=5; MaybeBoard.sq_[moveto_rank][1].side_=0; MaybeBoard.sq_[moveto_rank][1].piece_=0; } NowBoard.sq_[moveto_rank][moveto_file].piece_=-1; } } public void CountAllThePieces() { undef_enemy_pawn_most_advanced_file[1]=0; undef_enemy_pawn_most_advanced_file[2]=0; undef_enemy_pawn_most_advanced_rank[1]=0; undef_enemy_pawn_most_advanced_rank[2]=0; undef_enemy_pawn_nearest_king_file[1]=0; undef_enemy_pawn_nearest_king_file[2]=0; undef_enemy_pawn_nearest_king_rank[1]=0; undef_enemy_pawn_nearest_king_rank[2]=0; distance_to_edible_pawn[1]=200; distance_to_edible_pawn[2]=200; for(xxx=1; xxx < 9; xxx++) for(yyy=1; yyy < 9; yyy++) if(NowBoard.sq_[yyy][xxx].pawn()) { pawnowner=NowBoard.sq_[yyy][xxx].side_; if(Attackers[yyy][xxx][pawnowner] == 0) { if((pawnowner == 1) & ((undef_enemy_pawn_most_advanced_rank[2] == 0) | (yyy > undef_enemy_pawn_most_advanced_rank[2]))) { undef_enemy_pawn_most_advanced_rank[2]=yyy; undef_enemy_pawn_most_advanced_file[2]=xxx; } if((pawnowner == 2) & ((undef_enemy_pawn_most_advanced_rank[1] == 0) | (yyy < undef_enemy_pawn_most_advanced_rank[2]))) { undef_enemy_pawn_most_advanced_rank[1]=yyy; undef_enemy_pawn_most_advanced_file[1]=xxx; } if(distance_to_edible_pawn[3 - pawnowner] > (KingRank[3 - pawnowner] - yyy) * (KingRank[3 - pawnowner] - yyy) + (KingFile[3 - pawnowner] - xxx) * (KingFile[3 - pawnowner] - xxx)) { undef_enemy_pawn_nearest_king_rank[3 - pawnowner]=yyy; undef_enemy_pawn_nearest_king_file[3 - pawnowner]=xxx; } } } ZeroAllFiveCounts(); for(xxx=1; xxx < 9; xxx++) for(yyy=1; yyy < 9; yyy++) switch(NowBoard.sq_[yyy][xxx].piece_) { case 1: // '\001' PawnCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 2: // '\002' PawnCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 51: // '3' PawnCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 52: // '4' PawnCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 61: // '=' PawnCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 62: // '>' PawnCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 3: // '\003' KnightCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 2203: KnightCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 260: BishopCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 4: // '\004' BishopCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 2204: BishopCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 5: // '\005' RookCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 2205: RookCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 6: // '\006' RookCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 9: // '\t' QueenCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 29: // '\035' QueenCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 89: // 'Y' QueenCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 21: // '\025' QueenCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 2209: QueenCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 223: QueenCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 224: QueenCount[NowBoard.sq_[yyy][xxx].side_]++; break; case -1: KingCount[NowBoard.sq_[yyy][xxx].side_]++; break; case -2: KingCount[NowBoard.sq_[yyy][xxx].side_]++; break; } } public void DesignateTheFineMoves(Chsq chsq) { good_move=1; if((skipDtGM) | (depth > 1) | (worried)) return; if(IsMySideInCheck(3 - chsq.side_)) good_move += 5; if(chsq.strength() < NowBoard.sq_[d[depth]][c[depth]].strength()) good_move=(good_move + 3 * NowBoard.sq_[d[depth]][c[depth]].strength()) - chsq.strength(); if((Attackers[chsq.rank_][chsq.file_][3 - chsq.side_] > 0) & (AmIUnderAttack(d[depth],c[depth],whoseMove)==false)) good_move += 5 * chsq.strength(); if((NowBoard.sq_[d[depth]][c[depth]].piece_ > 0) & (Attackers[d[depth]][c[depth]][chsq.side_] > Attackers[d[depth]][c[depth]][3 - chsq.side_])) good_move += 3 * NowBoard.sq_[d[depth]][c[depth]].strength(); } public void DesignateTheGoodMoves(Chsq chsq) { if((whoseMove != chsq.side_) | ((skipDtGM) | (depth > 1))) return; if (chsq.side_==NowBoard.sq_[d[depth]][c[depth]].side_){return;} /*winner tries to exchange*/ if ((term_counts[chsq.side_]>term_counts[3-chsq.side_])&(chsq.strength()<=NowBoard.sq_[d[depth]][c[depth]].strength())) { switch(chsq.strength()){ case 5:{AssignGoodMove9();break;} case 4:{AssignGoodMove8();break;} case 3:{AssignGoodMove6();break;} case 2:{AssignGoodMove4();break;} case 1:{AssignGoodMove1();break;} } } IncrediblyGoodMove(chsq); if ((Attackers[chsq.rank_][chsq.file_][3-chsq.side_]>Attackers[chsq.rank_][chsq.file_][chsq.side_])) { if (AmIUnderAttack(d[depth],c[depth],3-chsq.side_)==true) AssignGoodMove1(); } if((AmIUnderAttack(d[depth],c[depth],whoseMove)==false) & (NowBoard.sq_[d[depth]][c[depth]].strength() > 3) && Math.random() * 100D < 99D) AssignGoodMove9(); if(NowBoard.sq_[d[depth]][c[depth]].strength() > 1 + chsq.strength() && Math.random() * 100D < 98D && !worried) AssignGoodMove9(); if(NowBoard.sq_[d[depth]][c[depth]].strength() > 2 + chsq.strength() && !worried) AssignGoodMove9(); if((chsq.strength() > 3) & (Attackers[chsq.rank_][chsq.file_][3 - chsq.side_] > 0) & (AmIUnderAttack(d[depth],c[depth],whoseMove)==false) && (Math.random() * 100D <98D && !worried)) {AssignGoodMove8();if (NowBoard.sq_[d[depth]][c[depth]].piece_!=0){AssignGoodMove9();}} if((AmIUnderAttack(d[depth],c[depth],whoseMove)==false) & (NowBoard.sq_[d[depth]][c[depth]].strength() > 3) && (Math.random() * 100D <98D && !worried)) AssignGoodMove7(); if((chsq.strength() < 3) & (NowBoard.sq_[d[depth]][c[depth]].strength() > 3) && (Math.random() * 100D <98D && !worried)) AssignGoodMove6(); if((chsq.strength() > 2) & (Attackers[chsq.rank_][chsq.file_][3 - chsq.side_] > 0) & (AmIUnderAttack(d[depth],c[depth],whoseMove)==false) && (Math.random() * 100D < 98D && !worried)) AssignGoodMove5(); if((AmIUnderAttack(d[depth],c[depth],whoseMove)==false) & (NowBoard.sq_[d[depth]][c[depth]].strength() > 1) && (Math.random() * 100D < 98D && !worried)) AssignGoodMove4(); if(chsq.strength() < NowBoard.sq_[d[depth]][c[depth]].strength() && Math.random() * 100D < 98D && !worried) AssignGoodMove3(); if((AmIUnderAttack(d[depth],c[depth],whoseMove)==false) & (IsMySideInCheck(3 - chsq.side_)) && (Math.random() * 100D <98D && !worried)) AssignGoodMove2(); if ((StrongestAttacker[d[depth]][c[depth]][3-chsq.side_]==0) &(NowBoard.sq_[d[depth]][c[depth]].piece_!=0) &(Math.random() * 100D < 98D)) { switch(NowBoard.sq_[d[depth]][c[depth]].strength()) { case 5:{AssignGoodMove9();break;} case 4:{AssignGoodMove7();break;} case 3:{AssignGoodMove5();break;} case 2:{AssignGoodMove3();break;} case 1:{AssignGoodMove2();break;} } } if ((StrongestAttacker[chsq.rank_][chsq.file_][3-chsq.side_]>0) &(StrongestAttacker[chsq.rank_][chsq.file_][3-chsq.side_]0) &(Attackers[chsq.rank_][chsq.file_][chsq.side_]==0) &(StrongestAttacker[d[depth]][c[depth]][3-chsq.side_]==0) &(Math.random() * 100D < 98D) ) { switch(chsq.strength()){ case 5:{AssignGoodMove9();break;} case 4:{AssignGoodMove7();break;} case 3:{AssignGoodMove5();break;} case 2:{AssignGoodMove3();break;} case 1:{AssignGoodMove2();break;} } } if((fifty_move_rule > 4) & (chsq.pawn()) & (Math.random() * 100D < (double)(100 - 10 * PawnCount[chsq.side_])) & (!worried) & (AmIUnderAttack(d[depth],c[depth],whoseMove)==false)) AssignGoodMove1(); if((WeakestAttacker[d[depth]][c[depth]][3-chsq.side_]>=chsq.strength())&(Attackers[d[depth]][c[depth]][3 - chsq.side_] < Attackers[d[depth]][c[depth]][chsq.side_]) & (NowBoard.sq_[d[depth]][c[depth]].piece_ != 0) && (Math.random() * 100D <98D && !worried)) AssignGoodMove1(); MoreGoodMoves(chsq); NightMoves(chsq); if(IsMySideInCheck(3 - chsq.side_) && !IGaveEscapableCheck(chsq.side_)) goodmove10=moveCounter; } public void DidICheckOrStalemate(Graphics g, int i) { if(GameOver) return; CountAllThePieces();if(AnotherWayToEndGame(g, i)) return; moveCounter=0; for(xx=1; (xx < 9) & (moveCounter == 0); xx++) for(yy=1; (yy < 9) & (moveCounter == 0); yy++) if(NowBoard.sq_[yy][xx].side_ == 3 - i) findPieceMoves(g, NowBoard.sq_[yy][xx], NowBoard, MaybeBoard); if(IsMySideInCheck(3 - i)) { if(moveCounter == 0) { ShowStatusQ("Checkmate!"); GameOver=true; wins[i]=wins[i] + 1; return; } ShowStatusQ("Check!"); } else if(moveCounter == 0) { ShowStatusQ("Stalemate!"); GameOver=true; drawn_games++; return; } } public void DisplayRules(Graphics g) { LowRectangle(g); g.drawString("Rooks, Bishops, and Knights may fuse with one", 5, 285); g.drawString("another, or be joined by the King. Compound", 5, 301); g.drawString("pieces may disassociate if not capturing. Here,", 5, 317); g.drawString("Royal R or Royal B may NOT pass through check.", 5, 333); } public boolean DoesArchiveMatchNowBoard() { if(whoseMove != ArchiveBoard[xxx].sq_[0][0].side_) return false; for(ff=1; ff < 9; ff++) for(ee=1; ee < 9; ee++) { if(NowBoard.sq_[ff][ee].piece_ != ArchiveBoard[xxx].sq_[ff][ee].piece_) return false; if(NowBoard.sq_[ff][ee].piece_ != ArchiveBoard[xxx].sq_[ff][ee].piece_) return false; } return true; } public void DrawMaybeBoard(Graphics g) { for(ee=1; ee < 9; ee++) for(ff=1; ff < 9; ff++) MaybeBoard.sq_[ff][ee].drawchsq2(g, 1); } public void DrawNowBoard(Graphics g) { for(ee=1; ee < 9; ee++) for(ff=1; ff < 9; ff++) { NowBoard.sq_[ff][ee].drawchsq(g, 1, icanmove[ff][ee]); if(NowBoard.sq_[ff][ee].piece_ < 0) { KingRank[NowBoard.sq_[ff][ee].side_]=ff; KingFile[NowBoard.sq_[ff][ee].side_]=ee; } } } public void DrawPromotionOptions(Graphics g) { g.setColor(niceblue); g.fillRect(0, 271, 300, 94); g.setColor(Color.black); g.setFont(f2); g.drawString("Choose: ", 5, 320); happySquare.side_=whoseMove; happySquare.rank_=-1; happySquare.file_=3; happySquare.piece_=9; happySquare.file_=4; happySquare.piece_=5; happySquare.drawchsq(g, 11, false); happySquare.file_=5; happySquare.piece_=4; happySquare.drawchsq(g, 11, false); happySquare.file_=6; happySquare.piece_=3; happySquare.drawchsq(g, 11, false); } public void GenerateAttackersArrays() { for(zatt=1; zatt < 3; zatt++) for(yatt=1; yatt < 9; yatt++) for(xatt=1; xatt < 9; xatt++) {Attackers[yatt][xatt][zatt]=0; StrongestAttacker[yatt][xatt][zatt]=0; WeakestAttacker[yatt][xatt][zatt]=0; } for(yatt=1; yatt < 9; yatt++) for(xatt=1; xatt < 9; xatt++) { satt=NowBoard.sq_[yatt][xatt].side_; patt=NowBoard.sq_[yatt][xatt].piece_; if((patt == 5) | (patt == 505) | (patt == 6) | (patt == 9) | (patt == 509) | (patt == -15) | (patt == 29) | (patt == 28)) { catt=xatt; datt=yatt; for(; catt < 9; catt++) { AddAnAttacker(); if((catt != xatt) & (NowBoard.sq_[datt][catt].side_ != 0)) catt=20; } catt=xatt; datt=yatt; for(; catt > 0; catt--) { AddAnAttacker(); if((catt != xatt) & (NowBoard.sq_[datt][catt].side_ != 0)) catt=-20; } catt=xatt; for(datt=yatt; datt < 9; datt++) { AddAnAttacker(); if((datt != yatt) & (NowBoard.sq_[datt][catt].side_ != 0)) datt=20; } catt=xatt; for(datt=yatt; datt > 0; datt--) { AddAnAttacker(); if((datt != yatt) & (NowBoard.sq_[datt][catt].side_ != 0)) datt=-20; } } if((patt == 4) | (patt == 504) | (patt == 9) | (patt == 509) | (patt == 21) | (patt == 28)) { catt=xatt; for(datt=yatt; (catt < 9) & (datt < 9); datt++) { AddAnAttacker(); if((catt != xatt) & (NowBoard.sq_[datt][catt].side_ != 0)) catt=20; catt++; } catt=xatt; for(datt=yatt; (catt > 0) & (datt < 9); datt++) { AddAnAttacker(); if((catt != xatt) & (NowBoard.sq_[datt][catt].side_ != 0)) catt=-20; catt--; } catt=xatt; for(datt=yatt; (catt < 9) & (datt > 0); catt++) { AddAnAttacker(); if((datt != yatt) & (NowBoard.sq_[datt][catt].side_ != 0)) catt=20; datt--; } catt=xatt; for(datt=yatt; (catt > 0) & (datt > 0); catt--) { AddAnAttacker(); if((datt != yatt) & (NowBoard.sq_[datt][catt].side_ != 0)) catt=-20; datt--; } } if((patt == 3) | (patt == 503) | (patt == -4)) { catt=xatt + 1; datt=yatt + 2; AddAnAttacker(); catt=xatt + 1; datt=yatt - 2; AddAnAttacker(); catt=xatt - 1; datt=yatt + 2; AddAnAttacker(); catt=xatt - 1; datt=yatt - 2; AddAnAttacker(); catt=xatt + 2; datt=yatt + 1; AddAnAttacker(); catt=xatt + 2; datt=yatt - 1; AddAnAttacker(); catt=xatt - 2; datt=yatt + 1; AddAnAttacker(); catt=xatt - 2; datt=yatt - 1; AddAnAttacker(); } if((patt < 0) | (patt == 25)) { catt=xatt + 1; datt=yatt + 1; AddAnAttacker(); catt=xatt + 1; datt=yatt - 1; AddAnAttacker(); catt=xatt - 1; datt=yatt + 1; AddAnAttacker(); catt=xatt - 1; datt=yatt - 1; AddAnAttacker(); catt=xatt; datt=yatt + 1; AddAnAttacker(); catt=xatt; datt=yatt - 1; AddAnAttacker(); catt=xatt + 1; datt=yatt; AddAnAttacker(); catt=xatt - 1; datt=yatt; AddAnAttacker(); } if((patt == 23) | (patt == 123)) { catt=xatt + 1; datt=yatt + 1; AddAnAttacker(); catt=xatt + 1; datt=yatt - 1; AddAnAttacker(); catt=xatt - 1; datt=yatt + 1; AddAnAttacker(); catt=xatt - 1; datt=yatt - 1; AddAnAttacker(); } if((patt == 1) | (patt == 2)) { if(satt == 1) { datt=yatt + 1; catt=xatt + 1; AddAnAttacker(); datt=yatt + 1; catt=xatt - 1; AddAnAttacker(); } if(satt == 2) { datt=yatt - 1; catt=xatt + 1; AddAnAttacker(); datt=yatt - 1; catt=xatt - 1; AddAnAttacker(); } } SupplementalAddAnAttacker(); } } public void GenerateCLCAttackersArrays(boolean flag, boolean flag1) { for(zatt=1; zatt < 3; zatt++) for(yatt=1; yatt < 9; yatt++) for(xatt=1; xatt < 9; xatt++) CLCAttackers[yatt][xatt][zatt]=0; for(yatt=1; yatt < 9; yatt++) for(xatt=1; xatt < 9; xatt++) { satt=MaybeBoard.sq_[yatt][xatt].side_; patt=MaybeBoard.sq_[yatt][xatt].piece_; SupplementalAddACLCAttacker(); if((patt == 5) | (patt == 2205) | (patt == 6) | (patt == 105) | (patt == 109) | (patt == 163) | (patt == 165) | (patt == 9) | (patt == -3) | (patt == 2209) | (patt == -9) | (patt == -67) | (patt == -68) | (patt == 57) | (patt == 29) | (patt == 28)) { catt=xatt; datt=yatt; for(; catt < 9; catt++) { AddACLCAttacker(); if((catt != xatt) & ((MaybeBoard.sq_[datt][catt].side_ == satt) | (MaybeBoard.sq_[datt][catt].piece_ > 0))) catt=20; } catt=xatt; datt=yatt; for(; catt > 0; catt--) { AddACLCAttacker(); if((catt != xatt) & ((MaybeBoard.sq_[datt][catt].side_ == satt) | (MaybeBoard.sq_[datt][catt].piece_ > 0))) catt=-20; } catt=xatt; for(datt=yatt; datt < 9; datt++) { AddACLCAttacker(); if((datt != yatt) & ((MaybeBoard.sq_[datt][catt].side_ == satt) | (MaybeBoard.sq_[datt][catt].piece_ > 0))) datt=20; } catt=xatt; for(datt=yatt; datt > 0; datt--) { AddACLCAttacker(); if((datt != yatt) & ((MaybeBoard.sq_[datt][catt].side_ == satt) | (MaybeBoard.sq_[datt][catt].piece_ > 0))) datt=-20; } } if((patt == 4) | (patt == 2204) | (patt == 9) | (patt == -3) | (patt == 2209) | (patt == -9) | (patt == -67) | (patt == -68) | (patt == 21) | (patt == 28) | (patt == 104) | (patt == 109) | (patt == 161) | (patt == 166)) { catt=xatt; for(datt=yatt; (catt < 9) & (datt < 9); datt++) { AddACLCAttacker(); if((catt != xatt) & ((MaybeBoard.sq_[datt][catt].side_ == satt) | (MaybeBoard.sq_[datt][catt].piece_ > 0))) catt=20; catt++; } catt=xatt; for(datt=yatt; (catt > 0) & (datt < 9); datt++) { AddACLCAttacker(); if((catt != xatt) & ((MaybeBoard.sq_[datt][catt].side_ == satt) | (MaybeBoard.sq_[datt][catt].piece_ > 0))) catt=-20; catt--; } catt=xatt; for(datt=yatt; (catt < 9) & (datt > 0); catt++) { AddACLCAttacker(); if((datt != yatt) & ((MaybeBoard.sq_[datt][catt].side_ == satt) | (MaybeBoard.sq_[datt][catt].piece_ > 0))) catt=20; datt--; } catt=xatt; for(datt=yatt; (catt > 0) & (datt > 0); catt--) { AddACLCAttacker(); if((datt != yatt) & ((MaybeBoard.sq_[datt][catt].side_ == satt) | (MaybeBoard.sq_[datt][catt].piece_ > 0))) catt=-20; datt--; } } if((patt == 60) | (patt == 260) | (patt == 224)) { catt=xatt + 2; datt=yatt + 2; AddACLCAttacker(); catt=xatt + 2; datt=yatt - 2; AddACLCAttacker(); catt=xatt - 2; datt=yatt + 2; AddACLCAttacker(); catt=xatt - 2; datt=yatt - 2; AddACLCAttacker(); } if((patt == 3) | (patt == -3) | (patt == -67) | (patt == -68) | (patt == 2203) | (patt == 103) | (patt == -4) | (patt == -5) | (patt == 21) | (patt == 28) | (patt == 29) | (patt == 57) | (patt == 193) | (patt == 162) | (patt == 164)) { catt=xatt + 1; datt=yatt + 2; AddACLCAttacker(); catt=xatt + 1; datt=yatt - 2; AddACLCAttacker(); catt=xatt - 1; datt=yatt + 2; AddACLCAttacker(); catt=xatt - 1; datt=yatt - 2; AddACLCAttacker(); catt=xatt + 2; datt=yatt + 1; AddACLCAttacker(); catt=xatt + 2; datt=yatt - 1; AddACLCAttacker(); catt=xatt - 2; datt=yatt + 1; AddACLCAttacker(); catt=xatt - 2; datt=yatt - 1; AddACLCAttacker(); } if((flag1) & (patt < 0) | (patt == 25)) { catt=xatt + 1; datt=yatt + 1; AddACLCAttacker(); catt=xatt + 1; datt=yatt - 1; AddACLCAttacker(); catt=xatt - 1; datt=yatt + 1; AddACLCAttacker(); catt=xatt - 1; datt=yatt - 1; AddACLCAttacker(); catt=xatt; datt=yatt + 1; AddACLCAttacker(); catt=xatt; datt=yatt - 1; AddACLCAttacker(); catt=xatt + 1; datt=yatt; AddACLCAttacker(); catt=xatt - 1; datt=yatt; AddACLCAttacker(); } if((patt == 23) | (patt == 123) | (patt == 140) | (patt == 223) | (patt == 224)) { catt=xatt + 1; datt=yatt + 1; AddACLCAttacker(); catt=xatt + 1; datt=yatt - 1; AddACLCAttacker(); catt=xatt - 1; datt=yatt + 1; AddACLCAttacker(); catt=xatt - 1; datt=yatt - 1; AddACLCAttacker(); } if((patt == 1) | (patt == 2) | (patt == 51) | (patt == 52) | (patt == 101) | (patt == 102) | (patt == 83) | (patt == 84) | (patt == 85) | (patt == 8101) | (patt == 8102)) { if(satt == 1) if(flag) { datt=yatt + 1; catt=xatt + 1; AddACLCAttacker(); datt=yatt + 1; catt=xatt - 1; AddACLCAttacker(); } else if(yatt < 8 && MaybeBoard.sq_[yatt + 1][xatt].piece_ == 0) { datt=yatt + 1; catt=xatt; AddACLCAttacker(); if((MaybeBoard.sq_[yatt + 1][xatt].piece_ == 0) & (MaybeBoard.sq_[yatt + 2][xatt].piece_ == 0) & (satt == 1) & (yatt == 2)) { datt=4; catt=xatt; AddACLCAttacker(); } } if(satt == 2) if(flag) { datt=yatt - 1; catt=xatt + 1; AddACLCAttacker(); datt=yatt - 1; catt=xatt - 1; AddACLCAttacker(); } else if(yatt > 1 && MaybeBoard.sq_[yatt - 1][xatt].piece_ == 0) { datt=yatt - 1; catt=xatt; AddACLCAttacker(); if((MaybeBoard.sq_[yatt - 1][xatt].piece_ == 0) & (MaybeBoard.sq_[yatt - 2][xatt].piece_ == 0) & (satt == 2) & (yatt == 7)) { datt=5; catt=xatt; AddACLCAttacker(); } } } } } public boolean HumanMoveAPiece(Graphics g, int i, int j) { moveto_rank=i; moveto_file=j; if((mover_rank == moveto_rank) & (mover_file == moveto_file)) { markingAPiece=true; for(x=1; x < 9; x++) for(y=1; y < 9; y++) NowBoard.sq_[y][x].drawchsq(g, 1, icanmove[y][x]); return false; } if(!IsMyMoveListed()) { if(AskAboutSeparation) { for(x=1; x < 9; x++) for(y=1; y < 9; y++) if((y != moveto_rank) | (x != moveto_file)) NowBoard.sq_[y][x].drawchsq(g, 1, icanmove[y][x]); NowBoard.sq_[moveto_rank][moveto_file].markchsq(g); } chugalug(g); return false; } TotalBackBoard(); who_backed=whoseMove; NormalMove(g); TotalMaybeBoard(NowBoard,MaybeBoard);DidICheckOrStalemate(g, whoseMove); IsTheGameOver(); markingAPiece=true; for(x=1; x < 9; x++) for(y=1; y < 9; y++) { NowBoard.sq_[y][x].drawchsq(g, 1, icanmove[y][x]); MaybeBoard.sq_[y][x].side_=NowBoard.sq_[y][x].side_; MaybeBoard.sq_[y][x].piece_=NowBoard.sq_[y][x].piece_; } return true; } public boolean IGaveEscapableCheck(int i) { if(i > 2) return false; if(!IsMySideInCheck(3 - i)) return false; GenerateCLCAttackersArrays(true, true); cee=KingFile[3 - i]; dee=KingRank[3 - i] + 1; if(KingCanEscape(3 - i)) return true; cee=KingFile[3 - i] + 1; dee=KingRank[3 - i] + 1; if(KingCanEscape(3 - i)) return true; cee=KingFile[3 - i] + 1; dee=KingRank[3 - i]; if(KingCanEscape(3 - i)) return true; cee=KingFile[3 - i] + 1; dee=KingRank[3 - i] - 1; if(KingCanEscape(3 - i)) return true; cee=KingFile[3 - i]; dee=KingRank[3 - i] - 1; if(KingCanEscape(3 - i)) return true; cee=KingFile[3 - i] - 1; dee=KingRank[3 - i] - 1; if(KingCanEscape(3 - i)) return true; cee=KingFile[3 - i] - 1; dee=KingRank[3 - i]; if(KingCanEscape(3 - i)) return true; cee=KingFile[3 - i] - 1; dee=KingRank[3 - i] + 1; if(KingCanEscape(3 - i)) return true; if(CLCAttackers[KingRank[3 - i]][KingFile[3 - i]][i] > 1) return false; GenerateCLCAttackersArrays(true, false); if(CLCAttackers[assailant_rank][assailant_file][3 - i] > 0) return true; if((assailant_file - KingFile[3 - i]) * (assailant_file - KingFile[3 - i]) + (assailant_rank - KingRank[3 - i]) * (assailant_rank - KingRank[3 - i]) == 5) return false; GenerateCLCAttackersArrays(false, false); if(assailant_file < KingFile[3 - i]) xee=1; if(assailant_file == KingFile[3 - i]) xee=0; if(assailant_file > KingFile[3 - i]) xee=-1; if(assailant_rank < KingRank[3 - i]) yee=1; if(assailant_rank == KingRank[3 - i]) yee=0; if(assailant_rank > KingRank[3 - i]) yee=-1; cee=assailant_file; dee=assailant_rank; if((cee<1)|(dee<1)|(cee>8)|(dee>8)) return true; while((cee != KingFile[3 - i]) | (dee != KingRank[3 - i])) { if(CLCAttackers[dee][cee][3 - i] > 0) return true; cee += xee; dee += yee; if((cee < 1) | (cee > 8) | (dee < 1) | (dee > 8)) { System.out.println("Error in IGaveEscapableCheck"); return true; } } return false; } public void IncrediblyGoodMove(Chsq chsq) { } public boolean IsEnemyBishop(int i, int j) { if((j > 8) | (j < 1) | (i > 8) | (i < 1)) return false; if(MaybeBoard.sq_[i][j].piece_ == 504) // if((whoisworried == 1) & (MaybeKingRank[whoisworried] > i)) // { // return false; // } else { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 509) // if((whoisworried == 1) & (MaybeKingRank[whoisworried] > i)) // { // return false; // } else { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 4) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 9) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 21) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 28) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == -10) { assailant_rank=i; assailant_file=j; return true; } else { return false; } } public boolean IsEnemyKing(int i, int j, int k) { if((j > 8) | (j < 1) | (i > 8) | (i < 1)) return false; if(MaybeBoard.sq_[i][j].side_ == k) return false; if(MaybeBoard.sq_[i][j].piece_ == -1) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == -100) if((whoisworried == 1) & (MaybeKingRank[whoisworried] > i)) { return false; } else { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == -2) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 25) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == -4) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == -10) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == -15) { assailant_rank=i; assailant_file=j; return true; } else { return false; } } public boolean IsEnemyKnight(int i, int j, int k) { if((j > 8) | (j < 1) | (i > 8) | (i < 1)) return false; if(MaybeBoard.sq_[i][j].side_ == k) return false; if(MaybeBoard.sq_[i][j].piece_ == 3) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 503) if((whoisworried == 1) & (MaybeKingRank[whoisworried] > i)) { return false; } else { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == -4) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == -5) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 21) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 28) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 29) { assailant_rank=i; assailant_file=j; return true; } else { return false; } } public boolean IsEnemyPawn(int i, int j, int k) { if((j > 8) | (j < 1) | (i > 8) | (i < 1)) return false; if(MaybeBoard.sq_[i][j].side_ == k) return false; if(MaybeBoard.sq_[i][j].piece_ == 1) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 2) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 503) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 504) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 505) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 509) { assailant_rank=i; assailant_file=j; return true; } else { return false; } } public boolean IsEnemyRook(int i, int j) { if((j > 8) | (j < 1) | (i > 8) | (i < 1)) return false; if(MaybeBoard.sq_[i][j].piece_ == 505) if((whoisworried == 1) & (MaybeKingRank[whoisworried] > i)) { return false; } else { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 509) if((whoisworried == 1) & (MaybeKingRank[whoisworried] > i)) { return false; } else { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 5) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == -15) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 6) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 9) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 28) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_ == 29) { assailant_rank=i; assailant_file=j; return true; } else { return false; } } public boolean IsMyMoveListed() { for(x=1; x <= moveCounter; x++) if((MaybeMoves[x].endingsquare_.rank_ == moveto_rank) & (MaybeMoves[x].endingsquare_.file_ == moveto_file) && (MaybeMoves[x].startingsquare_.piece_ == 9) | (MaybeMoves[x].startingsquare_.piece_ == 29) | (MaybeMoves[x].startingsquare_.piece_ == 28) | (MaybeMoves[x].startingsquare_.piece_ == 21) | (MaybeMoves[x].startingsquare_.piece_ == -4) | (MaybeMoves[x].startingsquare_.piece_ == -10) | (MaybeMoves[x].startingsquare_.piece_ == -15)) if(MaybeMoves[x].leftbehind_ == 0) { MaySeparate0=true; WentAlong0=MaybeMoves[x].tookalong_; } else if(MaybeMoves[x].tookalong_ == -1) { MaySeparateKing=true; StayedBehindKing=MaybeMoves[x].leftbehind_; } else if((MaybeMoves[x].tookalong_ != -1) & (MaybeMoves[x].leftbehind_ != 0)) { MaySeparateRBN=true; WentAlongRBN=MaybeMoves[x].tookalong_; StayedBehindRBN=MaybeMoves[x].leftbehind_; } if((MaySeparateRBN) & (MaySeparate0)) { AskAboutSeparation=true; return false; } if((MaySeparateRBN) & (MaySeparateKing)) { AskAboutSeparation=true; return false; } if((MaySeparateKing) & (MaySeparate0)) { AskAboutSeparation=true; return false; } for(x=1; x <= moveCounter; x++) if((MaybeMoves[x].endingsquare_.rank_ == moveto_rank) & (MaybeMoves[x].endingsquare_.file_ == moveto_file)) { WentAlong=MaybeMoves[x].tookalong_; StayedBehind=MaybeMoves[x].leftbehind_; return true; } return false; } public boolean IsMySideInCheck(int i) { whoisworried=i; for(xxx=1; xxx < 9; xxx++) for(yyy=1; yyy < 9; yyy++) if((i == MaybeBoard.sq_[yyy][xxx].side_) & (MaybeBoard.sq_[yyy][xxx].piece_ < 0)) { MaybeKingRank[whoisworried]=yyy; MaybeKingFile[whoisworried]=xxx; if(AmIUnderAttack(yyy, xxx, i)) return true; } return false; } public boolean IsTheGameOver() { ZeroAllFiveCounts(); for(xxx=1; xxx < 9; xxx++) for(yyy=1; yyy < 9; yyy++) { if(NowBoard.sq_[yyy][xxx].piece_ == 1) PawnCount[NowBoard.sq_[yyy][xxx].side_]++; if(NowBoard.sq_[yyy][xxx].piece_ == 2) PawnCount[NowBoard.sq_[yyy][xxx].side_]++; if(NowBoard.sq_[yyy][xxx].piece_ == 3) KnightCount[NowBoard.sq_[yyy][xxx].side_]++; if(NowBoard.sq_[yyy][xxx].piece_ == 4) BishopCount[NowBoard.sq_[yyy][xxx].side_]++; if(NowBoard.sq_[yyy][xxx].piece_ == 5) RookCount[NowBoard.sq_[yyy][xxx].side_]++; if(NowBoard.sq_[yyy][xxx].piece_ == 6) RookCount[NowBoard.sq_[yyy][xxx].side_]++; if(NowBoard.sq_[yyy][xxx].piece_ == 9) QueenCount[NowBoard.sq_[yyy][xxx].side_]++; } if((QueenCount[1] == 0) & (QueenCount[2] == 0) & (RookCount[1] == 0) & (RookCount[2] == 0) & (PawnCount[1] == 0) & (PawnCount[2] == 0)) { if((BishopCount[1] == 0) & (BishopCount[2] == 0) & (KnightCount[1] < 3) & (KnightCount[2] < 3)) { GameOver=true; drawn_games++; ShowStatusQ("Lack of force!"); return true; } if((BishopCount[1] < 2) & (BishopCount[2] < 2) & (KnightCount[1] == 0) & (KnightCount[2] == 0)) { GameOver=true; drawn_games++; ShowStatusQ("Lack of force!"); return true; } } return false; } public boolean KingCanEscape(int i) { if(cee > 8) return false; if(cee < 1) return false; if(dee > 8) return false; if(dee < 1) return false; if(MaybeBoard.sq_[dee][cee].side_ == i) return false; if ((KingRank[i]-assailant_rank)*(cee-assailant_file) == (dee-assailant_rank)*(KingFile[i]-assailant_file)) { if ((assailant_rank!=dee)|(assailant_file!=cee))if (MaybeBoard.sq_[assailant_rank][assailant_file].piece_>2){return false;} } if (assailant2_rank>0) { if ((KingRank[i]-assailant2_rank)*(cee-assailant2_file) == (dee-assailant2_rank)*(KingFile[i]-assailant2_file)) { if ((assailant2_rank!=dee)|(assailant2_file!=cee))if (MaybeBoard.sq_[assailant2_rank][assailant2_file].piece_>2){return false;} } } return CLCAttackers[dee][cee][3 - i] <= 0; } public void LowRectangle(Graphics g) { g.setColor(niceblue); g.fillRect(0, 271, 300, 94); g.fillRect(0, 0, 300, 29);g.setColor(Color.black);g.setFont(f1);NameThisChessVariant(g); g.setColor(Color.black); g.setFont(f1);NameThisChessVariant(g); chugalug(g); g.setColor(Color.black); g.setFont(f1); } public boolean MachineMoves(Graphics g, int i) { NegateGMCounts();goodmove1=0; goodmove2=0; goodmove3=0; goodmove4=0; goodmove5=0; goodmove6=0; goodmove7=0; goodmove8=0; goodmove9=0; goodmove10=0; UnTwoThePawns(i); moveCounter=0; if(!opening_library()) { gametreecounter=0; if(how_deep_to_seek > 3) depth=1; bestvcom1=-5000; for(x_run[1]=1; x_run[1] < 9; x_run[1]++) for(y_run[1]=1; y_run[1] < 9; y_run[1]++) if(NowBoard.sq_[y_run[1]][x_run[1]].side_ == i) findPieceMoves(g, NowBoard.sq_[y_run[1]][x_run[1]], NowBoard, MaybeBoard); depth=0; ShowStatusNothing(); ShowStatusNothing(); if(moveCounter == 0) { System.out.println("No Moves");WhoIsHuman[1]=true;WhoIsHuman[2]=true;ShowStatusQ("No Moves"); return false; } x=1 + (int)Math.floor(Math.random() * (double)moveCounter); if(Attackers[MaybeMoves[x].endingsquare_.rank_][MaybeMoves[x].endingsquare_.file_][3 - i] > Attackers[MaybeMoves[x].endingsquare_.rank_][MaybeMoves[x].endingsquare_.file_][i]) x=1 + (int)Math.floor(Math.random() * (double)moveCounter); if(Attackers[MaybeMoves[x].endingsquare_.rank_][MaybeMoves[x].endingsquare_.file_][3 - i] > Attackers[MaybeMoves[x].endingsquare_.rank_][MaybeMoves[x].endingsquare_.file_][i]) x=1 + (int)Math.floor(Math.random() * (double)moveCounter); if(goodmove1 > 0) x=goodmove1; if(goodmove2 > 0) x=goodmove2; if(goodmove3 > 0) x=goodmove3; if(goodmove4 > 0) x=goodmove4; if(goodmove5 > 0) x=goodmove5; if(goodmove6 > 0) x=goodmove6; if(goodmove7 > 0) x=goodmove7; if(goodmove8 > 0) x=goodmove8; if(goodmove9 > 0) x=goodmove9; if(goodmove10 > 0) x=goodmove10; moveto_file=MaybeMoves[x].endingsquare_.file_; moveto_rank=MaybeMoves[x].endingsquare_.rank_; mover_file=MaybeMoves[x].startingsquare_.file_; mover_rank=MaybeMoves[x].startingsquare_.rank_; WentAlong=MaybeMoves[x].tookalong_; StayedBehind=MaybeMoves[x].leftbehind_; } NormalMove(g); NowBoard.sq_[mover_rank][mover_file].drawchsq(g, 1, false); NowBoard.sq_[moveto_rank][moveto_file].drawchsq(g, 1, false); MaybeBoard.sq_[mover_rank][mover_file].side_=NowBoard.sq_[mover_rank][mover_file].side_; MaybeBoard.sq_[moveto_rank][moveto_file].side_=NowBoard.sq_[moveto_rank][moveto_file].side_; MaybeBoard.sq_[mover_rank][mover_file].piece_=NowBoard.sq_[mover_rank][mover_file].piece_; MaybeBoard.sq_[moveto_rank][moveto_file].piece_=NowBoard.sq_[moveto_rank][moveto_file].piece_; TotalMaybeBoard(NowBoard,MaybeBoard);DidICheckOrStalemate(g, i); if(GameOver) return true; if(fifty_move_rule>100) { fifty_move_rule=0; DrawNowBoard(g);ShowStatusQ("Fifty move rule!"); drawn_games++; GameOver=true; return false; } else { return true; } } public boolean MaybeAdd(Graphics g, Chsq chsq, int i, int j, CB10_10 cb10_10, CB10_10 cb10_10_1) { assailant_rank=0; assailant2_rank=0; assailant_file=0; assailant2_file=0; CheckSquare[depth]=false; SquatterOnCheckSquare[depth]=false; if((c[depth] < 1) | (c[depth] > 8) | (d[depth] < 1) | (d[depth] > 8)) return false; if(!PassedOtherRequirementsToKeep(chsq, cb10_10, cb10_10_1)) return false; if((j < 0) & (WalkedThroughCheck)) return true; if((i != 0) & (cb10_10.sq_[d[depth]][c[depth]].piece_ != 0)) return false; if(cb10_10.sq_[d[depth]][c[depth]].side_ == chsq.side_) { if((chsq.piece_ != -1) & (chsq.piece_ != -2) & (chsq.piece_ != 3) & (chsq.piece_ != 4) & (chsq.piece_ != 5) & (chsq.piece_ != 6) & (chsq.piece_ != 9) & (chsq.piece_ != 21) & (chsq.piece_ != 29)) return false; if(!amazonia && chsq.piece_ > 6) return false; if((cb10_10.sq_[d[depth]][c[depth]].piece_ != 3) & (cb10_10.sq_[d[depth]][c[depth]].piece_ != 4) & (cb10_10.sq_[d[depth]][c[depth]].piece_ != 5) & (cb10_10.sq_[d[depth]][c[depth]].piece_ != 6)) return false; if(((chsq.piece_ == 5) | (chsq.piece_ == 6)) & (cb10_10.sq_[d[depth]][c[depth]].piece_ == 3)) { i=0; j=29; } if(((chsq.piece_ == 5) | (chsq.piece_ == 6)) & (cb10_10.sq_[d[depth]][c[depth]].piece_ == 4)) { i=0; j=9; } if((chsq.piece_ == 3) & ((cb10_10.sq_[d[depth]][c[depth]].piece_ == 5) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 6))) { i=0; j=29; } if((chsq.piece_ == 21) & ((cb10_10.sq_[d[depth]][c[depth]].piece_ == 5) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 6))) { i=0; j=28; } if((chsq.piece_ == 4) & ((cb10_10.sq_[d[depth]][c[depth]].piece_ == 5) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 6))) { i=0; j=9; } if((chsq.piece_ == 3) & (cb10_10.sq_[d[depth]][c[depth]].piece_ == 4)) { i=0; j=21; } if((chsq.piece_ == 3) & (cb10_10.sq_[d[depth]][c[depth]].piece_ == 9)) { i=0; j=28; } if((chsq.piece_ == 29) & (cb10_10.sq_[d[depth]][c[depth]].piece_ == 4)) { i=0; j=28; } if((chsq.piece_ == 4) & (cb10_10.sq_[d[depth]][c[depth]].piece_ == 3)) { i=0; j=21; } if((chsq.piece_ == 3) & (cb10_10.sq_[d[depth]][c[depth]].piece_ == 3)) return false; if((chsq.piece_ == 4) & (cb10_10.sq_[d[depth]][c[depth]].piece_ == 4)) return false; if(!amazonia && (chsq.piece_ > 4) & (cb10_10.sq_[d[depth]][c[depth]].piece_ > 4)) return false; if(chsq.piece_ == 3) if(cb10_10.sq_[d[depth]][c[depth]].piece_ == 4) { i=0; j=21; } else if(cb10_10.sq_[d[depth]][c[depth]].piece_ == 9) { if(amazonia) { i=0; j=28; } else { return false; } } else if((cb10_10.sq_[d[depth]][c[depth]].piece_ == 5) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 6)) { i=0; j=29; } else if(cb10_10.sq_[d[depth]][c[depth]].piece_ > 0) return false; if(chsq.piece_ == 4) if(cb10_10.sq_[d[depth]][c[depth]].piece_ == 3) { i=0; j=21; } else if(cb10_10.sq_[d[depth]][c[depth]].piece_ == 29) { if(amazonia) { i=0; j=28; } else { return false; } } else if((cb10_10.sq_[d[depth]][c[depth]].piece_ == 5) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 6)) { i=0; j=9; } else if(cb10_10.sq_[d[depth]][c[depth]].piece_ > 0) return false; if((chsq.piece_ == 5) | (chsq.piece_ == 6)) if(cb10_10.sq_[d[depth]][c[depth]].piece_ == 3) { i=0; j=29; } else if(cb10_10.sq_[d[depth]][c[depth]].piece_ == 21) { if(amazonia) { i=0; j=28; } else { return false; } } else if(cb10_10.sq_[d[depth]][c[depth]].piece_ == 4) { i=0; j=9; } else if(cb10_10.sq_[d[depth]][c[depth]].piece_ > 0) return false; if(chsq.piece_ == 9) if(cb10_10.sq_[d[depth]][c[depth]].piece_ == 3) { if(amazonia) { i=0; j=28; } else { return false; } } else if(cb10_10.sq_[d[depth]][c[depth]].piece_ > 0) return false; if(chsq.piece_ == 21) if((cb10_10.sq_[d[depth]][c[depth]].piece_ == 5) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 6)) { if(amazonia) { i=0; j=28; } else { return false; } } else if(cb10_10.sq_[d[depth]][c[depth]].piece_ > 0) return false; if(chsq.piece_ == 29) if((cb10_10.sq_[d[depth]][c[depth]].piece_ == 4) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 6)) { if(amazonia) { i=0; j=28; } else { return false; } } else if(cb10_10.sq_[d[depth]][c[depth]].piece_ > 0) return false; if(((chsq.piece_ == -1) | (chsq.piece_ == -2)) & (cb10_10.sq_[d[depth]][c[depth]].piece_ == 3)) { i=0; j=-4; } if(((chsq.piece_ == -1) | (chsq.piece_ == -2)) & (cb10_10.sq_[d[depth]][c[depth]].piece_ == 4)) { i=0; j=-10; } if(((chsq.piece_ == -1) | (chsq.piece_ == -2)) & ((cb10_10.sq_[d[depth]][c[depth]].piece_ == 5) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 6))) { i=0; j=-15; } } alterMaybeBoard(g, chsq, cb10_10.sq_[d[depth]][c[depth]], i, j, cb10_10, cb10_10_1); worried=AmIWorried(chsq.side_); if(IsMySideInCheck(chsq.side_)) { if(j < 0) WalkedThroughCheck=true; unalterMaybeBoard(g, chsq, cb10_10.sq_[d[depth]][c[depth]], cb10_10, cb10_10_1); CheckSquare[depth]=true; if(cb10_10.sq_[d[depth]][c[depth]].piece_ != 0) SquatterOnCheckSquare[depth]=true; return true; } if ((how_deep_to_seek<4)&(seek_sacrificial_wins==false)&(WhoIsHuman[whoseMove]==false)&(moveCounter>0)&(chsq.side_==whoseMove)) { if ((Attackers[d[depth]][c[depth]][3-chsq.side_]>0)&(chsq.strength()>NowBoard.sq_[d[depth]][c[depth]].strength())& ( (WeakestAttacker[d[depth]][c[depth]][3-chsq.side_]Attackers[d[depth]][c[depth]][chsq.side_]-1) ) &(IsMySideInCheck(3-chsq.side_)==false) /// HEEEERE &(WinsAnotherWay(chsq)==false) ) { // SquatterOnCheckSquare[depth]=true; SquatterOnCheckSquare[depth]=false; if(cb10_10.sq_[d[depth]][c[depth]].piece_ != 0) SquatterOnCheckSquare[depth]=true; if (NowBoard.sq_[d[depth]][c[depth]].piece_==0){CheckSquare[depth]=true;} unalterMaybeBoard(g, chsq, cb10_10.sq_[d[depth]][c[depth]], cb10_10, cb10_10_1); return false; } } good_move=1; good_counter=1; if(moveCounter > 500) good_move=1; for(; good_counter <= good_move; good_counter++) { moveCounter++;if ((halt_if_king_taken==true)&(skipDtGM==false)&(depth<2)&(NowBoard.sq_[d[depth]][c[depth]].piece_<0)){goodmove10=moveCounter;System.out.print("King captured");WhoIsHuman[1]=true;WhoIsHuman[2]=true;} MaybeMoves[moveCounter].startingsquare_=chsq; MaybeMoves[moveCounter].endingsquare_=cb10_10.sq_[d[depth]][c[depth]]; MaybeMoves[moveCounter].tookalong_=j; MaybeMoves[moveCounter].leftbehind_=i; } DesignateTheGoodMoves(chsq); if((worried) & (IsThisAGoodMove()==false) & (moveCounter > 1) & (!WhoIsHuman[whoseMove])) moveCounter--; unalterMaybeBoard(g, chsq, cb10_10.sq_[d[depth]][c[depth]], cb10_10, cb10_10_1); return cb10_10.sq_[d[depth]][c[depth]].side_ == 0; } public boolean MaybeAddB(Graphics g, Chsq chsq, CB10_10 cb10_10, CB10_10 cb10_10_1) { if(chsq.piece_ == 4 && MaybeAdd(g, chsq, 0, 4, cb10_10, cb10_10_1)) return true; if(chsq.piece_ == 9 && (MaybeAdd(g, chsq, 5, 4, cb10_10, cb10_10_1)) | (MaybeAdd(g, chsq, 0, 9, cb10_10, cb10_10_1))) return true; if(chsq.piece_ == 21 && (MaybeAdd(g, chsq, 3, 4, cb10_10, cb10_10_1)) | (MaybeAdd(g, chsq, 0, 21, cb10_10, cb10_10_1))) return true; return chsq.piece_ == -10 && (MaybeAdd(g, chsq, -1, 4, cb10_10, cb10_10_1)) | (MaybeAdd(g, chsq, 0, -10, cb10_10, cb10_10_1)); } public boolean MaybeAddK(Graphics g, Chsq chsq, CB10_10 cb10_10, CB10_10 cb10_10_1) { if(!PassedOtherRequirementsToKeep(chsq, cb10_10, cb10_10_1)) return false; System.out.print("Y"); if(chsq.piece_ == 25 && MaybeAdd(g, chsq, 0, 25, cb10_10, cb10_10_1)) return true; if(chsq.piece_ == 167 && MaybeAdd(g, chsq, 0, 167, cb10_10, cb10_10_1)) return true; if(chsq.piece_ == 168 && MaybeAdd(g, chsq, 0, 168, cb10_10, cb10_10_1)) return true; if(chsq.piece_ == -1 && MaybeAdd(g, chsq, 0, -1, cb10_10, cb10_10_1)) return true; if(chsq.piece_ == -2 && MaybeAdd(g, chsq, 0, -1, cb10_10, cb10_10_1)) return true; if(chsq.piece_ == -4 && (MaybeAdd(g, chsq, 3, -1, cb10_10, cb10_10_1)) | (MaybeAdd(g, chsq, 0, -4, cb10_10, cb10_10_1))) return true; if(chsq.piece_ == -10 && (MaybeAdd(g, chsq, 4, -1, cb10_10, cb10_10_1)) | (MaybeAdd(g, chsq, 0, -10, cb10_10, cb10_10_1))) return true; return chsq.piece_ == -15 && (MaybeAdd(g, chsq, 5, -1, cb10_10, cb10_10_1)) | (MaybeAdd(g, chsq, 0, -15, cb10_10, cb10_10_1)); } public boolean MaybeAddN(Graphics g, Chsq chsq, CB10_10 cb10_10, CB10_10 cb10_10_1) { if(chsq.piece_ == 3 && MaybeAdd(g, chsq, 0, 3, cb10_10, cb10_10_1)) return true; if(chsq.piece_ == 29 && (MaybeAdd(g, chsq, 5, 3, cb10_10, cb10_10_1)) | (MaybeAdd(g, chsq, 0, 29, cb10_10, cb10_10_1))) return true; if(chsq.piece_ == 21 && (MaybeAdd(g, chsq, 4, 3, cb10_10, cb10_10_1)) | (MaybeAdd(g, chsq, 0, 21, cb10_10, cb10_10_1))) return true; return chsq.piece_ == -4 && (MaybeAdd(g, chsq, -1, 3, cb10_10, cb10_10_1)) | (MaybeAdd(g, chsq, 0, -4, cb10_10, cb10_10_1)); } public boolean MaybeAddR(Graphics g, Chsq chsq, CB10_10 cb10_10, CB10_10 cb10_10_1) { if((chsq.piece_ == 5) | (chsq.piece_ == 6) && MaybeAdd(g, chsq, 0, 5, cb10_10, cb10_10_1)) return true; if(chsq.piece_ == 9 && (MaybeAdd(g, chsq, 4, 5, cb10_10, cb10_10_1)) | (MaybeAdd(g, chsq, 0, 9, cb10_10, cb10_10_1))) return true; if(chsq.piece_ == 29 && (MaybeAdd(g, chsq, 3, 5, cb10_10, cb10_10_1)) | (MaybeAdd(g, chsq, 0, 29, cb10_10, cb10_10_1))) return true; return chsq.piece_ == -15 && (MaybeAdd(g, chsq, -1, 5, cb10_10, cb10_10_1)) | (MaybeAdd(g, chsq, 0, -15, cb10_10, cb10_10_1)); } public void MaybeCastleKingside(Graphics g, int i) { if(depth > 1) return; if(i == 1) { if(NowBoard.sq_[1][8].piece_ != 6) return; if(NowBoard.sq_[1][7].piece_ != 0) return; if(NowBoard.sq_[1][6].piece_ != 0) return; if(AmIUnderAttack(NowBoard.sq_[1][5].rank_, NowBoard.sq_[1][5].file_, 1)) return; if(AmIUnderAttack(NowBoard.sq_[1][6].rank_, NowBoard.sq_[1][6].file_, 1)) return; if(AmIUnderAttack(NowBoard.sq_[1][7].rank_, NowBoard.sq_[1][7].file_, 1)) return; d[depth]=1; c[depth]=7; MaybeAdd(g, NowBoard.sq_[1][5], 0, 6, NowBoard, MaybeBoard); MaybeMoves[moveCounter].tookalong_=-1; MaybeMoves[moveCounter].leftbehind_=0; } if(i == 2) { if(NowBoard.sq_[8][8].piece_ != 6) return; if(NowBoard.sq_[8][7].piece_ != 0) return; if(NowBoard.sq_[8][6].piece_ != 0) return; if(AmIUnderAttack(NowBoard.sq_[8][5].rank_, NowBoard.sq_[8][5].file_, 2)) return; if(AmIUnderAttack(NowBoard.sq_[8][6].rank_, NowBoard.sq_[8][6].file_, 2)) return; if(AmIUnderAttack(NowBoard.sq_[8][7].rank_, NowBoard.sq_[8][7].file_, 2)) return; d[depth]=8; c[depth]=7; MaybeAdd(g, NowBoard.sq_[8][5], 0, 6, NowBoard, MaybeBoard); MaybeMoves[moveCounter].tookalong_=-1; MaybeMoves[moveCounter].leftbehind_=0; } } public void MaybeCastleQueenside(Graphics g, int i) { if(depth > 1) return; if(i == 1) { if(NowBoard.sq_[1][1].piece_ != 6) return; if(NowBoard.sq_[1][2].piece_ != 0) return; if(NowBoard.sq_[1][3].piece_ != 0) return; if(NowBoard.sq_[1][4].piece_ != 0) return; if(AmIUnderAttack(NowBoard.sq_[1][5].rank_, NowBoard.sq_[1][5].file_, 1)) return; if(AmIUnderAttack(NowBoard.sq_[1][4].rank_, NowBoard.sq_[1][4].file_, 1)) return; if(AmIUnderAttack(NowBoard.sq_[1][3].rank_, NowBoard.sq_[1][3].file_, 1)) return; d[depth]=1; c[depth]=3; MaybeAdd(g, NowBoard.sq_[1][5], 0, 6, NowBoard, MaybeBoard); MaybeMoves[moveCounter].tookalong_=-1; MaybeMoves[moveCounter].leftbehind_=0; } if(i == 2) { if(NowBoard.sq_[8][1].piece_ != 6) return; if(NowBoard.sq_[8][2].piece_ != 0) return; if(NowBoard.sq_[8][3].piece_ != 0) return; if(NowBoard.sq_[8][4].piece_ != 0) return; if(AmIUnderAttack(NowBoard.sq_[8][5].rank_, NowBoard.sq_[8][5].file_, 2)) return; if(AmIUnderAttack(NowBoard.sq_[8][4].rank_, NowBoard.sq_[8][4].file_, 2)) return; if(AmIUnderAttack(NowBoard.sq_[8][3].rank_, NowBoard.sq_[8][3].file_, 2)) return; d[depth]=8; c[depth]=3; MaybeAdd(g, NowBoard.sq_[8][5], 0, 6, NowBoard, MaybeBoard); MaybeMoves[moveCounter].tookalong_=-1; MaybeMoves[moveCounter].leftbehind_=0; } } public void MoreGoodMoves(Chsq chsq) { } public void AssignVariantName(){ variant_name="Fusion Chess"; } public void NameThisChessVariant(Graphics g) { g.setColor(niceblue); g.fillRect(0, 0, 300, 29); g.setColor(Color.black); AssignVariantName(); g.setFont(f1);g.drawString(variant_name, 5, 15); g.drawString("About:", 240, 15); } public void NextOrdinaryPlayer(Graphics g) { IsTheGameOver(); if(GameOver) return; if (WhoIsHuman[whoseMove]==true){SayWhoIsHuman(g);} whoseMove=3 - whoseMove; UnTwoThePawns(whoseMove); if(whoseMove == 1) turncounter++; whatpiecescanmove(g); TotalMaybeBoard(NowBoard, MaybeBoard); TotalMaybeBoard(MaybeBoard, TwoBoard); TotalMaybeBoard(TwoBoard, ThreeBoard); TotalMaybeBoard(ThreeBoard, FourBoard); GenerateAttackersArrays(); CountAllThePieces(); DrawNowBoard(g); } public void NightMoves(Chsq chsq) { if ((goodmove1>0)|(goodmove2>0)|(goodmove3>0)|(goodmove4>0)|(goodmove5>0)|(goodmove6>0)|(goodmove7>0)|(goodmove8>0)|(goodmove9>0)|(goodmove10>0)){return;} if(worried) return; if(chsq.side_ != whoseMove) return; if((chsq.piece_ == 9) | (chsq.piece_ == 509) && (KingRank[3 - chsq.side_] == 1) | (KingRank[3 - chsq.side_] == 8) && (KingFile[3 - chsq.side_] == 1) | (KingFile[3 - chsq.side_] == 8) && (KingRank[3 - chsq.side_] - d[depth]) * (KingRank[3 - chsq.side_] - d[depth]) + (KingFile[3 - chsq.side_] - c[depth]) * (KingFile[3 - chsq.side_] - c[depth]) == 5) return; if((chsq.piece_ == 3) | (chsq.piece_ == 503) & (AmIUnderAttack(d[depth],c[depth],whoseMove)==false)) { knightforks(chsq); if(forked_royalty > 1 && Math.random() * 100D <98D && !worried) AssignGoodMove8(); if(forked_rookage > 1 && Math.random() * 100D <98D && !worried) AssignGoodMove5(); } if((chsq.piece_ == 1) | (chsq.piece_ == 2) | (chsq.piece_ == 83) | (chsq.piece_ == 84) | (chsq.piece_ == 51) | (chsq.piece_ == 52)) { pawnforks(chsq); if(forked_royalty > 1 && Math.random() * 100D <98D && !worried) AssignGoodMove8(); if(forked_rookage > 1 && Math.random() * 100D <98D) AssignGoodMove9(); if(forked_pieceage > 1 && Math.random() * 100D <98D && !worried) AssignGoodMove4(); } if((chsq.piece_ == 1) & (QueenCount[3 - chsq.side_] + RookCount[3 - chsq.side_] + KnightCount[3 - chsq.side_] + BishopCount[3 - chsq.side_] <= 2)) { if(chsq.side_ == 1 && Attackers[d[depth]][c[depth]][2] <= Attackers[d[depth]][c[depth]][1] && Math.random() * 100D <98D) { AssignGoodMove8(); return; } if(chsq.side_ == 2 && Attackers[d[depth]][c[depth]][1] <= Attackers[d[depth]][c[depth]][2] && Math.random() * 100D <98D) { AssignGoodMove8(); return; } } if((d[depth] == undef_enemy_pawn_most_advanced_rank[chsq.side_]) & (c[depth] == undef_enemy_pawn_most_advanced_file[chsq.side_]) && Math.random() * 100D <98D) { AssignGoodMove7(); return; } if((d[depth] == undef_enemy_pawn_nearest_king_rank[chsq.side_]) & (c[depth] == undef_enemy_pawn_nearest_king_file[chsq.side_]) && Math.random() * 100D <98D) { AssignGoodMove7(); return; } if((Attackers[d[depth]][c[depth]][3 - chsq.side_] < Attackers[d[depth]][c[depth]][chsq.side_]) & ((chsq.piece_ == 5) | (chsq.piece_ == 505) | (chsq.piece_ == 6) | (chsq.piece_ == 9) | (chsq.piece_ == 509) | (chsq.piece_ == 28) | (chsq.piece_ == 29) | (chsq.piece_ == 163) | (chsq.piece_ == 165))) { if(c[depth] == undef_enemy_pawn_most_advanced_file[chsq.side_]) { if(NowBoard.sq_[d[depth]][c[depth]].piece_ != 0 && Math.random() * 100D <98D) { AssignGoodMove7(); return; } if(chsq.side_ == 1 && (d[depth] < undef_enemy_pawn_most_advanced_rank[1]) & (NowBoard.sq_[undef_enemy_pawn_most_advanced_rank[1] - 1][undef_enemy_pawn_most_advanced_file[1]].side_ == 0) && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } if(chsq.side_ == 2 && (d[depth] > undef_enemy_pawn_most_advanced_rank[2]) & (NowBoard.sq_[undef_enemy_pawn_most_advanced_rank[2] + 1][undef_enemy_pawn_most_advanced_file[2]].side_ == 0) && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } if(chsq.side_ == 1 && d[depth] > undef_enemy_pawn_most_advanced_rank[1] && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } if(chsq.side_ == 2 && d[depth] < undef_enemy_pawn_most_advanced_rank[2] && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } } if(d[depth] == undef_enemy_pawn_most_advanced_rank[chsq.side_]) { if(NowBoard.sq_[d[depth]][c[depth]].piece_ != 0 && Math.random() * 100D <98D) { AssignGoodMove7(); return; } if(chsq.side_ == 1 && NowBoard.sq_[undef_enemy_pawn_most_advanced_rank[1] - 1][undef_enemy_pawn_most_advanced_file[1]].side_ != 0 && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } if(chsq.side_ == 2 && NowBoard.sq_[undef_enemy_pawn_most_advanced_rank[2] + 1][undef_enemy_pawn_most_advanced_file[2]].side_ != 0 && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } } if(c[depth] == undef_enemy_pawn_nearest_king_file[chsq.side_]) { if(NowBoard.sq_[d[depth]][c[depth]].piece_ != 0 && Math.random() * 100D <98D) { AssignGoodMove7(); return; } if(chsq.side_ == 1 && (d[depth] < undef_enemy_pawn_nearest_king_rank[1]) & (NowBoard.sq_[undef_enemy_pawn_nearest_king_rank[1] - 1][undef_enemy_pawn_nearest_king_file[1]].side_ == 0) && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } if(chsq.side_ == 2 && (d[depth] > undef_enemy_pawn_nearest_king_rank[2]) & (NowBoard.sq_[undef_enemy_pawn_nearest_king_rank[2] + 1][undef_enemy_pawn_nearest_king_file[2]].side_ == 0) && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } if(chsq.side_ == 1 && d[depth] > undef_enemy_pawn_nearest_king_rank[1] && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } if(chsq.side_ == 2 && d[depth] < undef_enemy_pawn_nearest_king_rank[2] && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } } if(d[depth] == undef_enemy_pawn_nearest_king_rank[chsq.side_]) { if(NowBoard.sq_[d[depth]][c[depth]].piece_ != 0 && Math.random() * 100D < 80D) { AssignGoodMove7(); return; } if(chsq.side_ == 1 && NowBoard.sq_[undef_enemy_pawn_nearest_king_rank[1] - 1][undef_enemy_pawn_nearest_king_file[1]].side_ != 0 && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } if(chsq.side_ == 2 && NowBoard.sq_[undef_enemy_pawn_nearest_king_rank[2] + 1][undef_enemy_pawn_nearest_king_file[2]].side_ != 0 && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } } } if((chsq.piece_ < 0) & (QueenCount[chsq.side_] + RookCount[chsq.side_] == 0)) { if(NowBoard.sq_[d[depth]][c[depth]].piece_ != 0 && Math.random() * 100D < 80D) { AssignGoodMove7(); return; } if((((chsq.rank_ - d[depth]) * (undef_enemy_pawn_nearest_king_rank[chsq.side_] - d[depth]) < 0) | (d[depth] == undef_enemy_pawn_nearest_king_rank[chsq.side_])) & (((chsq.file_ - c[depth]) * (undef_enemy_pawn_nearest_king_file[chsq.side_] - c[depth]) < 0) | (c[depth] == undef_enemy_pawn_nearest_king_file[chsq.side_])) && Math.random() * 100D < 80D) { AssignGoodMove7(); return; } if(((chsq.rank_ - d[depth]) * (undef_enemy_pawn_nearest_king_rank[chsq.side_] - d[depth]) <= 0) & ((chsq.file_ - c[depth]) * (undef_enemy_pawn_nearest_king_file[chsq.side_] - c[depth]) <= 0) && Math.random() * 100D < 80D) { AssignGoodMove6(); return; } if((chsq.rank_ - d[depth]) * (undef_enemy_pawn_nearest_king_rank[chsq.side_] - d[depth]) <= 0 && Math.random() * 100D < 80D) { goodmove5=0; return; } if((chsq.file_ - c[depth]) * (undef_enemy_pawn_nearest_king_file[chsq.side_] - c[depth]) <= 0 && Math.random() * 100D < 80D) { goodmove5=0; return; } } if((ArchiveCounter > 0) & (chsq.piece_ == 1) & (Math.random() * 100D <98D) && !worried) AssignGoodMove1(); if(RookCount[3 - chsq.side_] + BishopCount[3 - chsq.side_] + QueenCount[3 - chsq.side_] + KnightCount[3 - chsq.side_] > 2) return; if((chsq.piece_ == 1) & (Attackers[d[depth]][c[depth]][3 - chsq.side_] < Attackers[d[depth]][c[depth]][chsq.side_]) && (Math.random() * 100D < 70D && !worried)) AssignGoodMove1(); if(BishopCount[3 - chsq.side_] > 0) return; if(KnightCount[3 - chsq.side_] > 0) return; goodmove2=0; if((Attackers[d[depth]][c[depth]][3 - chsq.side_] < Attackers[d[depth]][c[depth]][chsq.side_]) & ((chsq.piece_ == 5) | (chsq.piece_ == 505) | (chsq.piece_ == 6) | (chsq.piece_ == 9) | (chsq.piece_ == 509) | (chsq.piece_ == 28) | (chsq.piece_ == 29) | (chsq.piece_ == 163) | (chsq.piece_ == 165) | (chsq.piece_ < 0)) && (AmIUnderAttack(d[depth],c[depth],whoseMove)==false) & ((d[depth] - KingRank[3 - chsq.side_]) * (d[depth] - KingRank[3 - chsq.side_]) + (c[depth] - KingFile[3 - chsq.side_]) * (c[depth] - KingFile[3 - chsq.side_]) > 2)) { AssignGoodMove1(); if((chsq.piece_ == 9) | (chsq.piece_ == 5) | (chsq.piece_ == 6) | (chsq.piece_ == 28) | (chsq.piece_ == 29) | (chsq.piece_ == 66) | (chsq.piece_ == 65)) { if((strategos == 6) & (d[depth] < chsq.rank_) & (d[depth] > KingRank[3 - chsq.side_]) & (d[depth] < KingRank[chsq.side_]) && !worried) AssignGoodMove8(); if((strategos == 12) & (d[depth] > chsq.rank_) & (d[depth] < KingRank[3 - chsq.side_]) & (d[depth] > KingRank[chsq.side_]) && !worried) AssignGoodMove8(); if((strategos == 9) & (c[depth] < chsq.file_) & (c[depth] > KingFile[3 - chsq.side_]) & (c[depth] < KingFile[chsq.side_]) && !worried) AssignGoodMove8(); if((strategos == 3) & (c[depth] > chsq.file_) & (c[depth] < KingFile[3 - chsq.side_]) & (c[depth] > KingFile[chsq.side_]) && !worried) AssignGoodMove8(); } if(chsq.piece_ < 0) { if((strategos == 6) & (d[depth] < chsq.rank_) & (d[depth] >= KingRank[3 - chsq.side_] + 2) & ((c[depth] - chsq.file_) * (c[depth] - KingFile[3 - chsq.side_]) <= 0) && !worried) AssignGoodMove8(); if((strategos == 12) & (d[depth] > chsq.rank_) & (d[depth] <= KingRank[3 - chsq.side_] + 2) & ((c[depth] - chsq.file_) * (c[depth] - KingFile[3 - chsq.side_]) <= 0) && !worried) AssignGoodMove8(); if((strategos == 3) & (c[depth] < chsq.file_) & (c[depth] >= KingFile[3 - chsq.side_] + 2) & ((d[depth] - chsq.rank_) * (d[depth] - KingRank[3 - chsq.side_]) <= 0) && !worried) AssignGoodMove8(); if((strategos == 9) & (c[depth] > chsq.file_) & (c[depth] <= KingFile[3 - chsq.side_] + 2) & ((d[depth] - chsq.rank_) * (d[depth] - KingRank[3 - chsq.side_]) <= 0) && !worried) AssignGoodMove8(); } if(chsq.piece_ > 0) { if((d[depth] < chsq.rank_) & (KingRank[3 - chsq.side_] < d[depth]) & (KingRank[chsq.side_] > d[depth]) & ((strategos == 6) | (strategos == 0)) | (d[depth] > chsq.rank_) & (KingRank[3 - chsq.side_] > d[depth]) & (KingRank[chsq.side_] < d[depth]) & ((strategos == 12) | (strategos == 0)) | (c[depth] < chsq.file_) & (KingFile[3 - chsq.side_] < c[depth]) & (KingFile[chsq.side_] > c[depth]) & ((strategos == 9) | (strategos == 0)) | (c[depth] > chsq.file_) & (KingFile[3 - chsq.side_] > c[depth]) & (KingFile[chsq.side_] < c[depth]) & ((strategos == 3) | (strategos == 0)) && !worried) AssignGoodMove9(); if((d[depth] == chsq.rank_) & (KingRank[3 - chsq.side_] < d[depth]) & (KingRank[chsq.side_] > d[depth]) & ((strategos == 6) | (strategos == 0)) | (d[depth] == chsq.rank_) & (KingRank[3 - chsq.side_] > d[depth]) & (KingRank[chsq.side_] < d[depth]) & ((strategos == 12) | (strategos == 0)) | (c[depth] == chsq.file_) & (KingFile[3 - chsq.side_] < c[depth]) & (KingFile[chsq.side_] > c[depth]) & ((strategos == 9) | (strategos == 0)) | (c[depth] == chsq.file_) & (KingFile[3 - chsq.side_] > c[depth]) & (KingFile[chsq.side_] < c[depth]) & ((strategos == 3) | (strategos == 0))) { AssignGoodMove6(); if(((KingRank[3 - chsq.side_] - chsq.rank_) * (KingRank[3 - chsq.side_] - chsq.rank_) + (KingFile[3 - chsq.side_] - chsq.file_) * (KingFile[3 - chsq.side_] - chsq.file_) <= 2) & ((KingRank[3 - chsq.side_] - d[depth]) * (KingRank[3 - chsq.side_] - d[depth]) + (KingFile[3 - chsq.side_] - c[depth]) * (KingFile[3 - chsq.side_] - c[depth]) > 2) & ((KingRank[chsq.side_] - chsq.rank_) * (KingRank[chsq.side_] - chsq.rank_) + (KingFile[chsq.side_] - chsq.file_) * (KingFile[chsq.side_] - chsq.file_) > 2)) { if((c[depth] == chsq.file_) & ((strategos == 9) | (strategos == 3) | (strategos == 0)) && !worried) AssignGoodMove9(); if((d[depth] == chsq.rank_) & ((strategos == 12) | (strategos == 6) | (strategos == 0)) && !worried) AssignGoodMove9(); } } if((d[depth] < chsq.rank_) & (KingRank[3 - chsq.side_] < d[depth]) & (KingRank[chsq.side_] > d[depth]) & (strategos == 0)) strategos=6; if((d[depth] > chsq.rank_) & (KingRank[3 - chsq.side_] > d[depth]) & (KingRank[chsq.side_] < d[depth]) & (strategos == 0)) strategos=12; if((c[depth] < chsq.file_) & (KingFile[3 - chsq.side_] < c[depth]) & (KingFile[chsq.side_] > c[depth]) & (strategos == 0)) strategos=9; if((c[depth] > chsq.file_) & (KingFile[3 - chsq.side_] > c[depth]) & (KingFile[chsq.side_] < c[depth]) & (strategos == 0)) strategos=3; if(((KingRank[3 - chsq.side_] >= chsq.rank_) | (KingRank[chsq.side_] <= chsq.rank_)) & (strategos == 6)) strategos=0; if(((KingRank[3 - chsq.side_] <= chsq.rank_) | (KingRank[chsq.side_] >= chsq.rank_)) & (strategos == 12)) strategos=0; if(((KingFile[3 - chsq.side_] >= chsq.file_) | (KingFile[chsq.side_] <= chsq.file_)) & (strategos == 9)) strategos=0; if(((KingFile[3 - chsq.side_] <= chsq.file_) | (KingFile[chsq.side_] >= chsq.file_)) & (strategos == 3)) strategos=0; } } } public void NormalMove(Graphics g) { System.out.println(""+NowBoard.sq_[mover_rank][mover_file].piece_+" "+mover_rank+""+mover_file+" "+moveto_rank+""+moveto_file); NormalMoveExtra(); if(NowBoard.sq_[mover_rank][mover_file].piece_ < 0) { KingRank[whoseMove]=moveto_rank; KingFile[whoseMove]=moveto_file; } PawnStuff(g); if( ((NowBoard.sq_[moveto_rank][moveto_file].side_!=whoseMove)&(NowBoard.sq_[moveto_rank][moveto_file].piece_ > 0)) | (NowBoard.sq_[mover_rank][mover_file].piece_ == 1) | (NowBoard.sq_[mover_rank][mover_file].piece_ == 51) | (NowBoard.sq_[mover_rank][mover_file].piece_ == 83) | (NowBoard.sq_[mover_rank][mover_file].piece_ == 85)) { fifty_move_rule=0; } else { fifty_move_rule++; if(fifty_move_rule > fifties_got_to) fifties_got_to=fifty_move_rule; } if(NowBoard.sq_[moveto_rank][moveto_file].piece_ < 0) { GameOver=true; wins[whoseMove]++; ShowStatusQ("Uh-oh!"); } NowBoard.sq_[moveto_rank][moveto_file].side_=NowBoard.sq_[mover_rank][mover_file].side_; NowBoard.sq_[moveto_rank][moveto_file].piece_=WentAlong; if(NowBoard.sq_[moveto_rank][moveto_file].piece_ < 0) { KingRank[whoseMove]=moveto_rank; KingFile[whoseMove]=moveto_file; } if(NowBoard.sq_[moveto_rank][moveto_file].piece_ == 6) NowBoard.sq_[moveto_rank][moveto_file].piece_=5; if(NowBoard.sq_[moveto_rank][moveto_file].piece_ == -2) NowBoard.sq_[moveto_rank][moveto_file].piece_=-1; PromoStuff(g); TwoingPawns(); if(StayedBehind == 0) NowBoard.sq_[mover_rank][mover_file].side_=0; NowBoard.sq_[mover_rank][mover_file].piece_=StayedBehind; FinaleForChessers(); DrawNowBoard(g); TotalMaybeBoard(NowBoard, MaybeBoard); TotalMaybeBoard(MaybeBoard, TwoBoard); TotalMaybeBoard(TwoBoard, ThreeBoard); TotalMaybeBoard(ThreeBoard, FourBoard); Archives(); ShowStatusNothing(); inquire_about_terms(); if (WhoIsHuman[whoseMove]==true){SayWhoIsHuman(g);} } public void FinaleForChessers(){} public void NormalMoveExtra() { } public boolean PassedOtherRequirementsToKeep(Chsq chsq, CB10_10 cb10_10, CB10_10 cb10_10_1) { return true; } public void PawnStuff(Graphics g) { if(((NowBoard.sq_[mover_rank][mover_file].piece_ == 1) | (NowBoard.sq_[mover_rank][mover_file].piece_ == 51) | (NowBoard.sq_[mover_rank][mover_file].piece_ == 83) | (NowBoard.sq_[mover_rank][mover_file].piece_ == 85)) && ((NowBoard.sq_[mover_rank][moveto_file].piece_ == 2) | (NowBoard.sq_[mover_rank][moveto_file].piece_ == 52) | (NowBoard.sq_[mover_rank][moveto_file].piece_ == 84))) { NowBoard.sq_[mover_rank][moveto_file].piece_=0; NowBoard.sq_[mover_rank][moveto_file].side_=0; ShowStatusQ("En Passant");//CapturedAPawn[whoseMove]=true; NowBoard.sq_[mover_rank][moveto_file].drawchsq(g, 1, false); MaybeBoard.sq_[mover_rank][moveto_file].side_=0; MaybeBoard.sq_[mover_rank][moveto_file].piece_=0; } } public void PromoStuff(Graphics g) { if((moveto_rank == 8) & (NowBoard.sq_[moveto_rank][moveto_file].side_ == 1) & ((NowBoard.sq_[moveto_rank][moveto_file].piece_ == 1) | (NowBoard.sq_[moveto_rank][moveto_file].piece_ == 51) | (NowBoard.sq_[moveto_rank][moveto_file].piece_ == 83))) if(!WhoIsHuman[1]) { NowBoard.sq_[moveto_rank][moveto_file].piece_=9; } else { PromotingAPawn=true; queening_rank=moveto_rank; queening_file=moveto_file; DrawPromotionOptions(g); } if((moveto_rank == 1) & (NowBoard.sq_[moveto_rank][moveto_file].side_ == 2) & ((NowBoard.sq_[moveto_rank][moveto_file].piece_ == 1) | (NowBoard.sq_[moveto_rank][moveto_file].piece_ == 51) | (NowBoard.sq_[moveto_rank][moveto_file].piece_ == 83))) if(!WhoIsHuman[2]) { NowBoard.sq_[moveto_rank][moveto_file].piece_=9; } else { PromotingAPawn=true; queening_rank=moveto_rank; queening_file=moveto_file; DrawPromotionOptions(g); } } public boolean PromotionClicks(int i, int j) { if(j < 300) return false; if(j > 330) return false; if(i < 90) return false; if(i > 210) return false; if(i < 120) return false; if(i < 150) xxx=5; else if(i < 180) xxx=4; else xxx=3; return true; } public void SayWhoIsHuman(Graphics g) { if(PromotingAPawn) return; g.setColor(niceblue); g.fillRect(0, 271, 300, 94);chugalug(g); g.setColor(Color.black); g.setFont(f1); g.drawString("White:", 10, 290); g.drawString("Red:", 10, 310); g.drawString("Computer", 120, 290); g.drawString("Computer", 120, 310); g.drawString("Human", 60, 290); g.drawString("Human", 60, 310); g.setFont(f1);NameThisChessVariant(g); g.drawString("White " + wins[1] + " Red " + wins[2] + " Drawn " + drawn_games, 5, 360); switch(who_is_winning) { case 1: // '\001' g.drawString("White wins", 30, 330); break; case 2: // '\002' g.drawString("Red wins", 30, 330); break; case 3: // '\003' g.drawString("Draw", 30, 330); break; } if(who_is_winning > 0) g.drawString("Continue Game", 150, 330); if(who_is_winning > 0) { if(accepted_terms) { g.drawRect(26, 316, 67, 18); g.drawRect(27, 317, 65, 16); } if(!accepted_terms) { g.drawRect(147, 316, 95, 18); g.drawRect(148, 317, 93, 16); } } g.setFont(f3); g.drawString("--Ed Friedlander", 235, 360); g.setFont(f2); if(humanizing) g.drawString("OKAY", 210, 300); g.setColor(Color.white); if(WhoIsHuman[1]) { g.drawRect(56, 276, 48, 18); g.drawRect(57, 277, 46, 16); } if(!WhoIsHuman[1]) { g.drawRect(117, 276, 61, 18); g.drawRect(118, 277, 59, 16); } g.setColor(Color.red); if(WhoIsHuman[2]) { g.drawRect(56, 296, 48, 18); g.drawRect(57, 297, 46, 16); } if(!WhoIsHuman[2]) { g.drawRect(117, 296, 61, 18); g.drawRect(118, 297, 59, 16); } } public void ShowStatusNothing() { if(!GameOver) ShowStatusQ(""); } public void StartUp(Graphics g) { accepted_terms=false; who_is_winning=0; assailant_rank=0; assailant_file=0; assailant2_rank=0; assailant2_file=0; turncounter=1;saved_fifty_move_rule=0;saved_turncounter=1;ShowStatusNothing(); amazonia=false; AskAboutSeparation=false; MaySeparateRBN=false; MaySeparateKing=false; MaySeparate0=false; WillSeparateRBN=false; WillSeparateKing=false; WillSeparate0=false; for(a=1; a <= 8; a++) for(b=1; b <= 8; b++) { NowBoard.sq_[b][a].piece_=0; NowBoard.sq_[b][a].side_=0; } NowBoard.sq_[1][1].side_=1; NowBoard.sq_[1][1].piece_=5; NowBoard.sq_[1][8].side_=1; NowBoard.sq_[1][8].piece_=5; NowBoard.sq_[8][1].side_=2; NowBoard.sq_[8][1].piece_=5; NowBoard.sq_[8][8].side_=2; NowBoard.sq_[8][8].piece_=5; NowBoard.sq_[1][3].side_=1; NowBoard.sq_[1][3].piece_=4; NowBoard.sq_[1][6].side_=1; NowBoard.sq_[1][6].piece_=4; NowBoard.sq_[8][3].side_=2; NowBoard.sq_[8][3].piece_=4; NowBoard.sq_[8][6].side_=2; NowBoard.sq_[8][6].piece_=4; NowBoard.sq_[1][4].side_=1; NowBoard.sq_[1][4].piece_=9; NowBoard.sq_[8][4].side_=2; NowBoard.sq_[8][4].piece_=9; NowBoard.sq_[1][5].side_=1; NowBoard.sq_[1][5].piece_=-1; NowBoard.sq_[8][5].side_=2; NowBoard.sq_[8][5].piece_=-1; NowBoard.sq_[1][2].side_=1; NowBoard.sq_[1][2].piece_=3; NowBoard.sq_[1][7].side_=1; NowBoard.sq_[1][7].piece_=3; NowBoard.sq_[8][2].side_=2; NowBoard.sq_[8][2].piece_=3; NowBoard.sq_[8][7].side_=2; NowBoard.sq_[8][7].piece_=3; for(x=1; x < 9; x++) { NowBoard.sq_[2][x].side_=1; NowBoard.sq_[2][x].piece_=1; NowBoard.sq_[7][x].side_=2; NowBoard.sq_[7][x].piece_=1; } SupplementalStartup(); for(x=1; x < 9; x++) for(y=1; y < 9; y++) { MaybeBoard.sq_[y][x].side_=NowBoard.sq_[y][x].side_; MaybeBoard.sq_[y][x].piece_=NowBoard.sq_[y][x].piece_; } whoseMove=1; whatpiecescanmove(g); PromotingAPawn=false; GameOver=false; fifty_move_rule=0; TotalSaveBoard(); TotalBackBoard(); } public void SupplementalAddAnAttacker() { } public boolean SupplementalAmIUnderAttackers(int i, int j, int k) { return false; } public boolean SupplementalAmIUnderSparrowAttackers(int i, int j, int k) { return false; } public void SupplementalInit() { } public void SupplementalMovers(Graphics g, Chsq chsq, CB10_10 cb10_10, CB10_10 cb10_10_1) { } public void SupplementalStartup() { } public void TotalMaybeBoard(CB10_10 cb10_10, CB10_10 cb10_10_1) { for(xxx=1; xxx < 9; xxx++) for(yyy=1; yyy < 9; yyy++) { cb10_10_1.sq_[yyy][xxx].side_=cb10_10.sq_[yyy][xxx].side_; cb10_10_1.sq_[yyy][xxx].piece_=cb10_10.sq_[yyy][xxx].piece_; } } public void TwoingPawns() { if((NowBoard.sq_[moveto_rank][moveto_file].side_ == 1) & (NowBoard.sq_[moveto_rank][moveto_file].piece_ == 1) & (moveto_rank == 4) & (mover_rank < 3)) NowBoard.sq_[moveto_rank][moveto_file].piece_=2; if((NowBoard.sq_[moveto_rank][moveto_file].side_ == 1) & (NowBoard.sq_[moveto_rank][moveto_file].piece_ == 51) & (moveto_rank == 4) & (mover_rank < 3)) NowBoard.sq_[moveto_rank][moveto_file].piece_=52; if((NowBoard.sq_[moveto_rank][moveto_file].side_ == 1) & (NowBoard.sq_[moveto_rank][moveto_file].piece_ == 83) & (moveto_rank == 4) & (mover_rank < 3)) NowBoard.sq_[moveto_rank][moveto_file].piece_=84; if((NowBoard.sq_[moveto_rank][moveto_file].side_ == 2) & (NowBoard.sq_[moveto_rank][moveto_file].piece_ == 1) & (moveto_rank == 5) & (mover_rank > 6)) NowBoard.sq_[moveto_rank][moveto_file].piece_=2; if((NowBoard.sq_[moveto_rank][moveto_file].side_ == 2) & (NowBoard.sq_[moveto_rank][moveto_file].piece_ == 51) & (moveto_rank == 5) & (mover_rank > 6)) NowBoard.sq_[moveto_rank][moveto_file].piece_=52; if((NowBoard.sq_[moveto_rank][moveto_file].side_ == 2) & (NowBoard.sq_[moveto_rank][moveto_file].piece_ == 83) & (moveto_rank == 5) & (mover_rank > 6)) NowBoard.sq_[moveto_rank][moveto_file].piece_=84; } public void UnTwoThePawns(int i) { for(xq=1; xq < 9; xq++) for(yq=1; yq < 9; yq++) if((NowBoard.sq_[yq][xq].side_ == i) & (NowBoard.sq_[yq][xq].piece_ == 2)) NowBoard.sq_[yq][xq].piece_=1; } public void WipeFusionOptions(Graphics g) { g.setColor(niceblue); g.fillRect(181, 270, 120, 70); } public void ZeroAllFiveCounts() { PawnCount[0]=0; QueenCount[0]=0; RookCount[0]=0; BishopCount[0]=0; KnightCount[0]=0; PawnCount[1]=0; QueenCount[1]=0; RookCount[1]=0; BishopCount[1]=0; KnightCount[1]=0; PawnCount[2]=0; QueenCount[2]=0; RookCount[2]=0; BishopCount[2]=0; KnightCount[2]=0; } public void alterMaybeBoard(Graphics g, Chsq chsq, Chsq chsq1, int i, int j, CB10_10 cb10_10, CB10_10 cb10_10_1) { cb10_10_1.sq_[chsq.rank_][chsq.file_].piece_=i; if(i == 0) cb10_10_1.sq_[chsq.rank_][chsq.file_].side_=0; cb10_10_1.sq_[chsq1.rank_][chsq1.file_].piece_=j; cb10_10_1.sq_[chsq1.rank_][chsq1.file_].side_=cb10_10.sq_[chsq.rank_][chsq.file_].side_; if((cb10_10.sq_[chsq.rank_][chsq.file_].piece_ == 1) & (cb10_10.sq_[chsq1.rank_][chsq1.file_].side_ == 0) & (chsq.file_ != chsq1.file_)) { cb10_10_1.sq_[chsq.rank_][chsq1.file_].piece_=0; cb10_10_1.sq_[chsq.rank_][chsq1.file_].side_=0; } } public void alterforked(Chsq chsq) { if((fork_c > 0) & (fork_c <= 8) & (fork_d > 0) & (fork_d <= 8)) { if(NowBoard.sq_[fork_d][fork_c].side_ == chsq.side_) return; if((NowBoard.sq_[fork_d][fork_c].strength() > 3) | (NowBoard.sq_[fork_d][fork_c].piece_ < 0)) forked_royalty++; if((NowBoard.sq_[fork_d][fork_c].strength() > 2) | (NowBoard.sq_[fork_d][fork_c].piece_ < 0)) forked_rookage++; if((NowBoard.sq_[fork_d][fork_c].strength() > 1) | (NowBoard.sq_[fork_d][fork_c].piece_ < 0)) forked_pieceage++; } } public void chugalug(Graphics g) { if(AskAboutSeparation) { g.setColor(Color.black); g.setFont(f1); if(MaySeparate0) g.drawString("Stay Together", 195, 286); if(MaySeparateRBN) { if(WentAlongRBN == 3) g.drawString("Knight Separates", 195, 306); if(WentAlongRBN == 4) g.drawString("Bishop Separates", 195, 306); if(WentAlongRBN == 5) g.drawString("Rook Separates", 195, 306); if(WentAlongRBN == 9) g.drawString("Queen Separates", 195, 306); } if(MaySeparateKing) g.drawString("King Separates", 195, 326); } } public boolean findPieceMoves(Graphics g, Chsq chsq, CB10_10 cb10_10, CB10_10 cb10_10_1) { CheckSquare[depth]=false; SquatterOnCheckSquare[depth]=false; SupplementalMovers(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; if((chsq.piece_ == 9) | (chsq.piece_ == 509) | (chsq.piece_ == 5) | (chsq.piece_ == 505) | (chsq.piece_ == -15) | (chsq.piece_ == 29) | (chsq.piece_ == 28) | (chsq.piece_ == 6)) { c[depth]=chsq.file_ - 1; for(d[depth]=chsq.rank_; (MaybeAddR(g, chsq, cb10_10, cb10_10_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]); c[depth]=c[depth] - 1); } WalkedThroughCheck=false; if((chsq.piece_ == 9) | (chsq.piece_ == 509) | (chsq.piece_ == 5) | (chsq.piece_ == 505) | (chsq.piece_ == -15) | (chsq.piece_ == 29) | (chsq.piece_ == 28) | (chsq.piece_ == 6)) { c[depth]=chsq.file_ + 1; for(d[depth]=chsq.rank_; (MaybeAddR(g, chsq, cb10_10, cb10_10_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]); c[depth]++); } WalkedThroughCheck=false; if((chsq.piece_ == 9) | (chsq.piece_ == 509) | (chsq.piece_ == 5) | (chsq.piece_ == 505) | (chsq.piece_ == -15) | (chsq.piece_ == 29) | (chsq.piece_ == 28) | (chsq.piece_ == 6)) { c[depth]=chsq.file_; for(d[depth]=chsq.rank_ - 1; (MaybeAddR(g, chsq, cb10_10, cb10_10_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]); d[depth]=d[depth] - 1); } WalkedThroughCheck=false; if((chsq.piece_ == 9) | (chsq.piece_ == 509) | (chsq.piece_ == 5) | (chsq.piece_ == 505) | (chsq.piece_ == -15) | (chsq.piece_ == 29) | (chsq.piece_ == 28) | (chsq.piece_ == 6)) { c[depth]=chsq.file_; for(d[depth]=chsq.rank_ + 1; (MaybeAddR(g, chsq, cb10_10, cb10_10_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]); d[depth]++); } WalkedThroughCheck=false; if((chsq.piece_ == 9) | (chsq.piece_ == 509) | (chsq.piece_ == 4) | (chsq.piece_ == 504) | (chsq.piece_ == -10) | (chsq.piece_ == 21) | (chsq.piece_ == 28)) { c[depth]=chsq.file_ - 1; for(d[depth]=chsq.rank_ - 1; (MaybeAddB(g, chsq, cb10_10, cb10_10_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]); d[depth]=d[depth] - 1) c[depth]=c[depth] - 1; } WalkedThroughCheck=false; if((chsq.piece_ == 9) | (chsq.piece_ == 509) | (chsq.piece_ == 4) | (chsq.piece_ == 504) | (chsq.piece_ == -10) | (chsq.piece_ == 21) | (chsq.piece_ == 28)) { c[depth]=chsq.file_ - 1; for(d[depth]=chsq.rank_ + 1; (MaybeAddB(g, chsq, cb10_10, cb10_10_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]); d[depth]=d[depth] + 1) c[depth]=c[depth] - 1; } WalkedThroughCheck=false; if((chsq.piece_ == 9) | (chsq.piece_ == 509) | (chsq.piece_ == 4) | (chsq.piece_ == 504) | (chsq.piece_ == -10) | (chsq.piece_ == 21) | (chsq.piece_ == 28)) { c[depth]=chsq.file_ + 1; for(d[depth]=chsq.rank_ - 1; (MaybeAddB(g, chsq, cb10_10, cb10_10_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]); d[depth]=d[depth] - 1) c[depth]=c[depth] + 1; } WalkedThroughCheck=false; if((chsq.piece_ == 9) | (chsq.piece_ == 509) | (chsq.piece_ == 4) | (chsq.piece_ == 504) | (chsq.piece_ == -10) | (chsq.piece_ == 21) | (chsq.piece_ == 28)) { c[depth]=chsq.file_ + 1; for(d[depth]=chsq.rank_ + 1; (MaybeAddB(g, chsq, cb10_10, cb10_10_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]); d[depth]=d[depth] + 1) c[depth]=c[depth] + 1; } WalkedThroughCheck=false; // System.out.print("Z"); if((chsq.piece_ == -1) | (chsq.piece_ == -100) | (chsq.piece_ == -2) | (chsq.piece_ == -4) | (chsq.piece_ == -10) | (chsq.piece_ == -15)|(chsq.piece_==25)) { WalkedThroughCheck=false; c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_; MaybeAddK(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_; d[depth]=chsq.rank_ + 1; MaybeAddK(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_; MaybeAddK(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_; d[depth]=chsq.rank_ - 1; MaybeAddK(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ + 1; MaybeAddK(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ - 1; MaybeAddK(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ + 1; MaybeAddK(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ - 1; MaybeAddK(g, chsq, cb10_10, cb10_10_1); } if((chsq.piece_ == 3) | (chsq.piece_ == 503) | (chsq.piece_ == -4) | (chsq.piece_ == 21) | (chsq.piece_ == 28) | (chsq.piece_ == 29)) { WalkedThroughCheck=false; c[depth]=chsq.file_ - 2; d[depth]=chsq.rank_ - 1; MaybeAddN(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_ - 2; d[depth]=chsq.rank_ + 1; MaybeAddN(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_ + 2; d[depth]=chsq.rank_ - 1; MaybeAddN(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_ + 2; d[depth]=chsq.rank_ + 1; MaybeAddN(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ - 2; MaybeAddN(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ + 2; MaybeAddN(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ - 2; MaybeAddN(g, chsq, cb10_10, cb10_10_1); WalkedThroughCheck=false; c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ + 2; MaybeAddN(g, chsq, cb10_10, cb10_10_1); } if((chsq.piece_ == 1) | (chsq.piece_ == 2) | (chsq.piece_ == 503) | (chsq.piece_ == 504) | (chsq.piece_ == 505) | (chsq.piece_ == 509) | (chsq.piece_ == -100)) { if((chsq.side_ == 1) & (chsq.rank_ < 8)) { if(chsq.rank_ > 1 && chsq.piece_ == 51 && NowBoard.sq_[chsq.rank_ - 1][chsq.file_].piece_ == 0) { c[depth]=chsq.file_; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } if(chsq.piece_ == 83) for(d[depth]=chsq.rank_ - 1; (d[depth] > 1) & (NowBoard.sq_[d[depth]][chsq.file_].piece_ == 0); d[depth]=d[depth] - 1) if(d[depth] > 0) MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); if(NowBoard.sq_[chsq.rank_ + 1][chsq.file_].piece_ == 0) { c[depth]=chsq.file_; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } if((chsq.rank_ < 3) & (NowBoard.sq_[chsq.rank_ + 1][chsq.file_].piece_ == 0) & (NowBoard.sq_[chsq.rank_ + 2][chsq.file_].piece_ == 0)) { c[depth]=chsq.file_; d[depth]=chsq.rank_ + 2; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } if(chsq.file_ > 1) { if((NowBoard.sq_[chsq.rank_ + 1][chsq.file_ - 1].side_ != 0) & (NowBoard.sq_[chsq.rank_ + 1][chsq.file_ - 1].side_ != chsq.side_) & (NowBoard.sq_[chsq.rank_ + 1][chsq.file_ - 1].piece_ != 0)) { c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } if((NowBoard.sq_[chsq.rank_ + 1][chsq.file_ - 1].side_ == 0) & (NowBoard.sq_[chsq.rank_][chsq.file_ - 1].side_ != chsq.side_) & ((NowBoard.sq_[chsq.rank_][chsq.file_ - 1].piece_ == 2) | (NowBoard.sq_[chsq.rank_][chsq.file_ - 1].piece_ == 52) | (NowBoard.sq_[chsq.rank_][chsq.file_ - 1].piece_ == 84))) { c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } } if(chsq.file_ < 8) { if((NowBoard.sq_[chsq.rank_ + 1][chsq.file_ + 1].side_ != 0) & (NowBoard.sq_[chsq.rank_ + 1][chsq.file_ + 1].side_ != chsq.side_) & (NowBoard.sq_[chsq.rank_ + 1][chsq.file_ + 1].piece_ != 0)) { c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } if((NowBoard.sq_[chsq.rank_ + 1][chsq.file_ + 1].side_ == 0) & (NowBoard.sq_[chsq.rank_][chsq.file_ + 1].side_ != chsq.side_) & ((NowBoard.sq_[chsq.rank_][chsq.file_ + 1].piece_ == 2) | (NowBoard.sq_[chsq.rank_][chsq.file_ + 1].piece_ == 52) | (NowBoard.sq_[chsq.rank_][chsq.file_ + 1].piece_ == 84))) { c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } } } if((chsq.side_ == 2) & (chsq.rank_ > 1)) { if(chsq.rank_ < 8 && chsq.piece_ == 51 && NowBoard.sq_[chsq.rank_ - 1][chsq.file_].piece_ == 0) { c[depth]=chsq.file_; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } if(chsq.piece_ == 83) for(d[depth]=chsq.rank_ + 1; (d[depth] < 8) & (NowBoard.sq_[d[depth]][chsq.file_].piece_ == 0); d[depth]++) if(d[depth] < 9) MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); if(NowBoard.sq_[chsq.rank_ - 1][chsq.file_].piece_ == 0) { c[depth]=chsq.file_; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } if((chsq.rank_ >= 7) & (NowBoard.sq_[chsq.rank_ - 1][chsq.file_].piece_ == 0) & (NowBoard.sq_[chsq.rank_ - 2][chsq.file_].piece_ == 0)) { c[depth]=chsq.file_; d[depth]=chsq.rank_ - 2; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } if(chsq.file_ > 1) { if((NowBoard.sq_[chsq.rank_ - 1][chsq.file_ - 1].side_ != 0) & (NowBoard.sq_[chsq.rank_ - 1][chsq.file_ - 1].side_ != chsq.side_) & (NowBoard.sq_[chsq.rank_ - 1][chsq.file_ - 1].piece_ != 0)) { c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } if((NowBoard.sq_[chsq.rank_ - 1][chsq.file_ - 1].side_ == 0) & (NowBoard.sq_[chsq.rank_][chsq.file_ - 1].side_ != chsq.side_) & ((NowBoard.sq_[chsq.rank_][chsq.file_ - 1].piece_ == 2) | (NowBoard.sq_[chsq.rank_][chsq.file_ - 1].piece_ == 52) | (NowBoard.sq_[chsq.rank_][chsq.file_ - 1].piece_ == 84))) { c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } } if(chsq.file_ < 8) { if((NowBoard.sq_[chsq.rank_ - 1][chsq.file_ + 1].side_ != 0) & (NowBoard.sq_[chsq.rank_ - 1][chsq.file_ + 1].side_ != chsq.side_) & (NowBoard.sq_[chsq.rank_ - 1][chsq.file_ + 1].piece_ != 0)) { c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } if((NowBoard.sq_[chsq.rank_ - 1][chsq.file_ + 1].side_ == 0) & (NowBoard.sq_[chsq.rank_][chsq.file_ + 1].side_ != chsq.side_) & ((NowBoard.sq_[chsq.rank_][chsq.file_ + 1].piece_ == 2) | (NowBoard.sq_[chsq.rank_][chsq.file_ + 1].piece_ == 52) | (NowBoard.sq_[chsq.rank_][chsq.file_ + 1].piece_ == 84))) { c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, 0, chsq.piece_, cb10_10, cb10_10_1); } } } } int _tmp=chsq.piece_; int _tmp1=chsq.file_; return true; } public void init() { seek_sacrificial_wins=false; halt_if_king_taken=true; term_counts=new int[5]; best_four_count=new int[7]; CLCAttackers=new int[10][10][3]; undef_enemy_pawn_most_advanced_file=new int[3]; undef_enemy_pawn_most_advanced_rank=new int[3]; undef_enemy_pawn_nearest_king_file=new int[3]; undef_enemy_pawn_nearest_king_rank=new int[3]; distance_to_edible_pawn=new int[3]; KingCount=new int[4]; PawnCount=new int[3]; KnightCount=new int[3]; BishopCount=new int[3]; RookCount=new int[3]; QueenCount=new int[3]; KingFile=new int[4]; KingRank=new int[4]; MaybeKingFile=new int[4]; MaybeKingRank=new int[4]; Attackers=new int[10][10][3]; StrongestAttacker=new int[10][10][3]; WeakestAttacker=new int[10][10][3]; NowBoard=new CB10_10(308); SaveBoard=new CB10_10(308); BackBoard=new CB10_10(308); MaybeBoard=new CB10_10(308); OneBoard=new CB10_10(308); TwoBoard=new CB10_10(308); ThreeBoard=new CB10_10(308); FourBoard=new CB10_10(308); icanmove=new boolean[10][10]; ArchiveBoard=new CB10_10[102]; happySquare=new Chsq(1, 1, 5, 1); MaybeMoves=new ChmoFuse[1001]; niceblue=new Color(0, 192, 255); c=new int[7]; d=new int[7]; x_run=new int[7]; y_run=new int[7]; z_run=new int[7]; CheckSquare=new boolean[7]; SquatterOnCheckSquare=new boolean[7]; f1=new Font("Arial", 0, 12); f2=new Font("Arial", 0, 18); f3=new Font("Arial", 0, 8); WhoIsHuman=new boolean[5]; wins=new int[3]; depth=0; WhoIsHuman[1]=true; WhoIsHuman[2]=false; AskAboutSeparation=false; SupplementalInit(); GameOver=false; PromotingAPawn=false; drawn_games=0; Graphics g=getGraphics(); setBackground(niceblue); markingAPiece=true; for(a=1; a <= 1000; a++) MaybeMoves[a]=new ChmoFuse(happySquare, happySquare, 29, 29); WhoIsHuman[0]=true; WhoIsHuman[1]=true; WhoIsHuman[2]=false; wins[0]=0; wins[1]=0; wins[2]=0; millipede1=System.currentTimeMillis();for (xxx=0;xxx<102;xxx++){ArchiveBoard[xxx]=new CB10_10(310);} millipede2=System.currentTimeMillis(); how_deep_to_seek=1; StartUp(g); } public void inquire_about_terms() { /* who_is_winning=0; if((!WhoIsHuman[1]) & (!WhoIsHuman[2])) return; if(IsMySideInCheck(1)) return; if(IsMySideInCheck(2)) return; CountAllThePieces(); term_counts[1]=90 * QueenCount[1] + 50 * RookCount[1] + 30 * BishopCount[1] + 30 * KnightCount[1] + 10 * PawnCount[1]; term_counts[2]=90 * QueenCount[2] + 50 * RookCount[2] + 30 * BishopCount[2] + 30 * KnightCount[2] + 10 * PawnCount[2]; if((fifty_move_rule > 2) & (PawnCount[1] == 0) & (PawnCount[2] == 0) & (term_counts[1] == term_counts[2]) & (bestvcom1 == 0)) who_is_winning=3; if(!WhoIsHuman[whoseMove]) { if(((bestvcom1 >= 0) | (bestvcom1 == -5000) | (how_deep_to_seek < 4)) & (term_counts[whoseMove] >= 30 + term_counts[3 - whoseMove])) who_is_winning=whoseMove; if(((bestvcom1 <= 0) | (how_deep_to_seek < 4)) & (term_counts[3 - whoseMove] >= 30 + term_counts[whoseMove])) who_is_winning=3 - whoseMove; } if(WhoIsHuman[whoseMove]) { if((Attackers[moveto_rank][moveto_file][3 - whoseMove] == 0) & (term_counts[whoseMove] >= 30 + term_counts[3 - whoseMove])) who_is_winning=whoseMove; if(term_counts[3 - whoseMove] >= 30 + term_counts[whoseMove]) who_is_winning=3 - whoseMove; } */ } public void knightforks(Chsq chsq) { forked_royalty=0; forked_rookage=0; forked_pieceage=0; fork_c=c[depth] + 2; fork_d=d[depth] + 1; alterforked(chsq); fork_c=c[depth] + 2; fork_d=d[depth] - 1; alterforked(chsq); fork_c=c[depth] - 2; fork_d=d[depth] + 1; alterforked(chsq); fork_c=c[depth] - 2; fork_d=d[depth] - 1; alterforked(chsq); fork_c=c[depth] + 1; fork_d=d[depth] + 2; alterforked(chsq); fork_c=c[depth] + 1; fork_d=d[depth] - 2; alterforked(chsq); fork_c=c[depth] - 1; fork_d=d[depth] + 2; alterforked(chsq); fork_c=c[depth] - 1; fork_d=d[depth] - 2; alterforked(chsq); } public boolean markAPiece(Graphics g, int i, int j) { if(NowBoard.sq_[i][j].side_ != whoseMove) return false; moveCounter=0; c[depth]=j; d[depth]=i; mover_rank=i; mover_file=j; moveCounter=0; findPieceMoves(g, NowBoard.sq_[mover_rank][mover_file], NowBoard, MaybeBoard); if(moveCounter == 0) { stringy=NowBoard.sq_[mover_rank][mover_file].moniker();ShowStatusQ("That "+stringy+" cannot move."); NowBoard.sq_[i][j].drawchsq(g, 1, icanmove[i][j]); return false; } NowBoard.sq_[i][j].drawchsq(g, 2, false); for(x=1; x <= moveCounter; x++) MaybeMoves[x].endingsquare_.markchsq(g); markingAPiece=false; return true; } public boolean mouseDown(Event event, int i, int j) { if(NowBoard == null) return true; Graphics g=getGraphics(); if(j < 30) if((humanizing) | (PromotingAPawn)) { return true; } else { DisplayRules(g); return true; } if(!PromotingAPawn) SayWhoIsHuman(g); if(PromotingAPawn) DrawPromotionOptions(g); ShowStatusNothing(); if(AskAboutSeparation) { humanizing=false; if(i < 180) return true; if(j < 270) return true; if(j < 290) { if(!MaySeparate0) return true; WillSeparate0=true; StayedBehind=0; WentAlong=WentAlong0; } if((j > 289) & (j < 310)) { if(!MaySeparateRBN) return true; WillSeparateRBN=true; StayedBehind=StayedBehindRBN; WentAlong=WentAlongRBN; } if(j > 309) { if(!MaySeparateKing) return true; WillSeparateKing=true; StayedBehind=StayedBehindKing; WentAlong=-1; } WillSeparate0=false; WillSeparateKing=false; WillSeparateRBN=false; MaySeparate0=false; MaySeparateKing=false; MaySeparateRBN=false; AskAboutSeparation=false; NowBoard.sq_[mover_rank][mover_file].piece_=StayedBehind; FinaleForChessers(); if(StayedBehind != 0) NowBoard.sq_[mover_rank][mover_file].side_=whoseMove; else NowBoard.sq_[mover_rank][mover_file].side_=0; NowBoard.sq_[moveto_rank][moveto_file].piece_=WentAlong; NowBoard.sq_[moveto_rank][moveto_file].side_=whoseMove; NowBoard.sq_[mover_rank][mover_file].drawchsq(g, 1, false); NowBoard.sq_[moveto_rank][moveto_file].drawchsq(g, 1, false); MaybeBoard.sq_[mover_rank][mover_file].side_=NowBoard.sq_[mover_rank][mover_file].side_; MaybeBoard.sq_[mover_rank][mover_file].piece_=NowBoard.sq_[mover_rank][mover_file].piece_; MaybeBoard.sq_[moveto_rank][moveto_file].side_=NowBoard.sq_[moveto_rank][moveto_file].side_; MaybeBoard.sq_[moveto_rank][moveto_file].piece_=NowBoard.sq_[moveto_rank][moveto_file].piece_; for(a=1; a <= 8; a++) for(b=1; b <= 8; b++) NowBoard.sq_[b][a].drawchsq(g, 1, icanmove[b][a]); WipeFusionOptions(g); TotalMaybeBoard(NowBoard,MaybeBoard);DidICheckOrStalemate(g, whoseMove); NextOrdinaryPlayer(g); if(WhoIsHuman[whoseMove]) { markingAPiece=true; return true; } a=1; markingAPiece=true; } else { if(GameOver) { GameOver=false; StartUp(g); repaint(); return true; } a=i / 30; b=9 - j / 30; if(!PromotingAPawn) if((i >= 56) & (j >= 276) & (i <= 104) & (j <= 294)) { humanizing=true; WhoIsHuman[1]=true; SayWhoIsHuman(g); } else if((i >= 117) & (j >= 276) & (i <= 178) & (j <= 294)) { humanizing=true; WhoIsHuman[1]=false; SayWhoIsHuman(g); } else if((i >= 56) & (j >= 296) & (i <= 104) & (j <= 314)) { humanizing=true; WhoIsHuman[2]=true; SayWhoIsHuman(g); } else if((i >= 117) & (j >= 296) & (i <= 178) & (j <= 314)) { humanizing=true; WhoIsHuman[2]=false; SayWhoIsHuman(g); } else if((i >= 26) & (j > 316) & (i <= 93) & (j <= 334)) { if(who_is_winning == 0) return true; humanizing=true; accepted_terms=true; SayWhoIsHuman(g); } else if((i >= 147) & (j >= 316) & (i < 242) & (j < 334)) { if(who_is_winning == 0) return true; humanizing=true; accepted_terms=false; SayWhoIsHuman(g); } else if((i >= 210) & (j >= 285) & (i < 270) & (j < 305)) { humanizing=false; SayWhoIsHuman(g); if(accepted_terms) { if(who_is_winning != 0) GameOver=true; if(who_is_winning == 1) wins[1]++; if(who_is_winning == 2) wins[2]++; if(who_is_winning == 3) drawn_games++; if(who_is_winning != 0) { StartUp(g); repaint(); markingAPiece=true; return true; } } } if(humanizing) return true; if(PromotingAPawn) { if(!PromotionClicks(i, j)) return true; NowBoard.sq_[queening_rank][queening_file].piece_=xxx; NowBoard.sq_[queening_rank][queening_file].side_=whoseMove; MaybeBoard.sq_[queening_rank][queening_file].piece_=xxx; MaybeBoard.sq_[queening_rank][queening_file].side_=whoseMove; NowBoard.sq_[queening_rank][queening_file].drawchsq(g, 1, false); TotalMaybeBoard(NowBoard,MaybeBoard);DidICheckOrStalemate(g, whoseMove); PromotingAPawn=false; SayWhoIsHuman(g); NextOrdinaryPlayer(g); if(WhoIsHuman[whoseMove]) { markingAPiece=true; return true; } } UnTwoThePawns(whoseMove); if((a < 1) | (a > 8) | (b < 1) | (b > 8) && WhoIsHuman[whoseMove]) return true; if(WhoIsHuman[whoseMove]) if(markingAPiece) markAPiece(g, b, a); else if(HumanMoveAPiece(g, b, a)) { if(GameOver) return true; if(PromotingAPawn) return true; NextOrdinaryPlayer(g); if(WhoIsHuman[whoseMove]) markingAPiece=true; } } while((!WhoIsHuman[whoseMove]) & (!GameOver) & (!PromotingAPawn)) { MachineMoves(g, whoseMove); if(GameOver) return true; NextOrdinaryPlayer(g); if(WhoIsHuman[whoseMove]) markingAPiece=true; UnTwoThePawns(whoseMove); } return true; } public boolean opening_library() { return false; } public void paint(Graphics g) { setBackground(niceblue); if(NowBoard == null) { g.setColor(Color.black); g.setFont(f1); AssignVariantName();g.drawString("Thank you for playing " + variant_name + "!", 5, 20); g.drawString("Final totals: White " + wins[1] + " Red " + wins[2] + " Drawn " + drawn_games, 5, 50); return; } for(a=1; a <= 8; a++) for(b=1; b <= 8; b++) NowBoard.sq_[b][a].drawchsq(g, 1, icanmove[b][a]); g.setColor(niceblue); g.fillRect(0, 271, 300, 29);g.setColor(Color.black);g.setFont(f1);NameThisChessVariant(g); chugalug(g); g.setColor(Color.black); g.setFont(f1); g.setColor(Color.black); if(!PromotingAPawn) SayWhoIsHuman(g); if(PromotingAPawn) DrawPromotionOptions(g); if((!markingAPiece) & (WhoIsHuman[whoseMove]) & (!AskAboutSeparation)) { NowBoard.sq_[mover_rank][mover_file].drawchsq(g, 2, false); for(x=1; x <= moveCounter; x++) MaybeMoves[x].endingsquare_.markchsq(g); } if(AskAboutSeparation) NowBoard.sq_[moveto_rank][moveto_file].markchsq(g); chugalug(g); } public void pawnforks(Chsq chsq) { forked_royalty=0; forked_rookage=0; forked_pieceage=0; if(chsq.side_ == 1) { fork_c=c[depth] + 1; fork_d=d[depth] + 1; alterforked(chsq); fork_c=c[depth] - 1; fork_d=d[depth] + 1; alterforked(chsq); } if(chsq.side_ == 2) { fork_c=c[depth] + 1; fork_d=d[depth] - 1; alterforked(chsq); fork_c=c[depth] - 1; fork_d=d[depth] - 1; alterforked(chsq); } } public void stop() { NowBoard=null; MaybeBoard=null; OneBoard=null; TwoBoard=null; ThreeBoard=null; FourBoard=null; ArchiveBoard=null; MaybeMoves=null; Attackers=null; CLCAttackers=null; destroy(); } public void unalterMaybeBoard(Graphics g, Chsq chsq, Chsq chsq1, CB10_10 cb10_10, CB10_10 cb10_10_1) { cb10_10_1.sq_[chsq.rank_][chsq.file_].piece_=cb10_10.sq_[chsq.rank_][chsq.file_].piece_; cb10_10_1.sq_[chsq.rank_][chsq.file_].side_=cb10_10.sq_[chsq.rank_][chsq.file_].side_; cb10_10_1.sq_[chsq1.rank_][chsq1.file_].piece_=cb10_10.sq_[chsq1.rank_][chsq1.file_].piece_; cb10_10_1.sq_[chsq1.rank_][chsq1.file_].side_=cb10_10.sq_[chsq1.rank_][chsq1.file_].side_; cb10_10_1.sq_[chsq.rank_][chsq1.file_].piece_=cb10_10.sq_[chsq.rank_][chsq1.file_].piece_; cb10_10_1.sq_[chsq.rank_][chsq1.file_].side_=cb10_10.sq_[chsq.rank_][chsq1.file_].side_; } public void whatpiecescanmove(Graphics g) { for(ee=1; ee < 9; ee++) for(ff=1; ff < 9; ff++) { icanmove[ff][ee]=false; moveCounter=0; if(NowBoard.sq_[ff][ee].piece_ < 0) { KingRank[NowBoard.sq_[ff][ee].side_]=ff; KingFile[NowBoard.sq_[ff][ee].side_]=ee; } if(whoseMove == NowBoard.sq_[ff][ee].side_) { skipDtGM=true; findPieceMoves(g, NowBoard.sq_[ff][ee], NowBoard, MaybeBoard); skipDtGM=false; if(moveCounter > 0) icanmove[ff][ee]=true; } } DrawNowBoard(g); } public void SupplementalAddACLCAttacker() { } static String variant_name; int term_counts[]; static boolean accepted_terms; static int who_is_winning; static int how_deep_to_seek; public static long millipede1; public static long millipede2; static int gametreecounter; int best_four_count[]; static int vcom1; static int vcom2; static int vcom3; static int vcom4; static int bestvcom1; static int bestvcom2; static int bestvcom3; static int bestvcom4; static boolean skipDtGM; static boolean worried; static int whoisworried; static int forked_royalty; static int forked_rookage; static int forked_pieceage; static int fork_c; static int fork_d; static int turncounter;static int saved_turncounter;static int back_turncounter;static int saved_fifty_move_rule;static int back_fifty_move_rule; static int assailant_rank; static int assailant_file; static int assailant2_rank; static int assailant2_file; int CLCAttackers[][][]; static int cee; static int dee; static int eee; static int xee; static int yee; int undef_enemy_pawn_most_advanced_file[]; int undef_enemy_pawn_most_advanced_rank[]; int undef_enemy_pawn_nearest_king_file[]; int undef_enemy_pawn_nearest_king_rank[]; int distance_to_edible_pawn[]; static int pawnowner; static int strategos; boolean amazonia; boolean WalkedThroughCheck; boolean AskAboutSeparation; boolean MaySeparateRBN; boolean MaySeparateKing; boolean MaySeparate0; boolean WillSeparateRBN; boolean WillSeparateKing; boolean WillSeparate0; int KingCount[]; int PawnCount[]; int KnightCount[]; int BishopCount[]; int RookCount[]; int QueenCount[]; int KingFile[]; int KingRank[]; int MaybeKingFile[]; int MaybeKingRank[]; int WentAlongRBN; int StayedBehindRBN; int WentAlong0; int StayedBehindKing; int Attackers[][][]; int StrongestAttacker[][][]; int WeakestAttacker[][][]; CB10_10 NowBoard; CB10_10 BackBoard; CB10_10 SaveBoard; CB10_10 MaybeBoard; CB10_10 OneBoard; CB10_10 TwoBoard; CB10_10 ThreeBoard; CB10_10 FourBoard; boolean icanmove[][]; CB10_10 ArchiveBoard[]; Chsq happySquare; ChmoFuse MaybeMoves[]; static int ArchiveCounter; static int fifties_got_to; static int goodmove1; static int goodmove2; static int goodmove3; static int goodmove4; static int goodmove5; static int goodmove6; static int goodmove7; static int goodmove8; static int goodmove9; static int goodmove10; static int GM1count; static int GM2count; static int GM3count; static int GM4count; static int GM5count; static int GM6count; static int GM7count; static int GM8count; static int GM9count; static int GM10count; static int WentAlong; static int StayedBehind; Color niceblue; int c[]; int d[]; int x_run[]; int y_run[]; int z_run[]; static int x; static int y; static int z; static int a; static int b; static int depth; static int e; static int f; static int h; static int moveCounter; static int xx; static int yy; static int cc; static int dd; static int ee; static int ff; static int xxx; static int yyy; static int satt; static int patt; static int zatt; static int yatt; static int xatt; static int datt; static int catt; static int xq; static int yq; static int good_move; static int good_counter; boolean CheckSquare[]; boolean SquatterOnCheckSquare[]; static boolean markingAPiece; static boolean GameOver; static boolean PromotingAPawn; static boolean humanizing; static int mover_rank; static int mover_file; static int moveto_rank; static int moveto_file; static int queening_rank; static int queening_file; Font f1; Font f2; Font f3; static int drawn_games; static int fifty_move_rule; static int whoseMove; boolean WhoIsHuman[]; int wins[]; static String stringy; static boolean amizonia; static boolean halt_if_king_taken; static boolean seek_sacrificial_wins; static char oopsKey; static char loadKey; static char saveKey; static int who_backed; static int who_saved;static int when_saved; }