// 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: GrandAce.java import java.applet.Applet; import java.awt.*; public class GrandAce extends Applet { public GrandAce() { } public void SomethingElseForTotalBackBoard() { } public void SomethingElseForTotalSaveBoard() { } public void SomethingElseForUnBackBoard() { } public void SomethingElseForLoadSavedBoard() { } public boolean SomeInitialConditionForKeydown(){ 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) { 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) { 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 < 13; xxx++) for(yyy=0; yyy < 13; 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 < 13; xxx++) for(yyy=0; yyy < 13; 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 < 13; xxx++) for(yyy=0; yyy < 13; 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 < 13; xxx++) for(yyy=0; yyy < 13; 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 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 Promotions(){ if (choiss==1){return;} if(NowBoard.sq_[moveto_rank][moveto_file].piece_==1 && (NowBoard.sq_[moveto_rank][moveto_file].side_==1) & (moveto_rank==12) | (NowBoard.sq_[moveto_rank][moveto_file].side_==2) & (moveto_rank==1)) { switch(moveto_file) { case 1: // '\001' NowBoard.sq_[moveto_rank][moveto_file].piece_=5; break; case 2: // '\002' NowBoard.sq_[moveto_rank][moveto_file].piece_=118; break; case 3: // '\003' NowBoard.sq_[moveto_rank][moveto_file].piece_=156; break; case 4: // '\004' NowBoard.sq_[moveto_rank][moveto_file].piece_=31; break; case 5: // '\005' NowBoard.sq_[moveto_rank][moveto_file].piece_=158; break; case 6: // '\006' NowBoard.sq_[moveto_rank][moveto_file].piece_=159; break; case 7: // '\007' NowBoard.sq_[moveto_rank][moveto_file].piece_=159; break; case 8: // '\b' NowBoard.sq_[moveto_rank][moveto_file].piece_=158; break; case 9: // '\t' NowBoard.sq_[moveto_rank][moveto_file].piece_=31; break; case 10: // '\n' NowBoard.sq_[moveto_rank][moveto_file].piece_=156; break; case 11: // '\013' NowBoard.sq_[moveto_rank][moveto_file].piece_=118; break; case 12: // '\f' NowBoard.sq_[moveto_rank][moveto_file].piece_=5; break; } MaybeBoard.sq_[moveto_rank][moveto_file].piece_=NowBoard.sq_[moveto_rank][moveto_file].piece_; } } public void AddAnAttacker() { if((xatt==catt) & (yatt==datt)) return; if((catt > 12) | (datt > 12) | (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) { cc=j + 1; dd=i; while(cc < 13) if(MaybeBoard.sq_[dd][cc].side_ !=0) { cc=20; } else { if(IsEnemyGriffin(dd + 1, cc + 1, k)) return true; if(IsEnemyGriffin(dd - 1, cc + 1, k)) return true; if(MaybeBoard.sq_[dd][cc].piece_ !=0) cc=20; cc++; } cc=j - 1; dd=i; while(cc > 0) if(MaybeBoard.sq_[dd][cc].side_ !=0) { cc=-1; } else { if(IsEnemyGriffin(dd + 1, cc - 1, k)) return true; if(IsEnemyGriffin(dd - 1, cc - 1, k)) return true; if(MaybeBoard.sq_[dd][cc].piece_ !=0) cc=-1; cc--; } cc=j; for(dd=i + 1; dd < 13;) if(MaybeBoard.sq_[dd][cc].side_ !=0) { dd=20; } else { if(IsEnemyGriffin(dd + 1, cc + 1, k)) return true; if(IsEnemyGriffin(dd + 1, cc - 1, k)) return true; if(MaybeBoard.sq_[dd][cc].piece_ !=0) dd=20; dd++; } cc=j; for(dd=i - 1; dd > 0;) if(MaybeBoard.sq_[dd][cc].side_ !=0) { dd=-1; } else { if(IsEnemyGriffin(dd - 1, cc + 1, k)) return true; if(IsEnemyGriffin(dd - 1, cc - 1, k)) return true; if(MaybeBoard.sq_[dd][cc].piece_ !=0) dd=-1; dd--; } cc=j - 4; dd=i - 1; if(IsEnemyGiraffe(dd, cc, k)) return true; cc=j - 4; dd=i + 1; if(IsEnemyGiraffe(dd, cc, k)) return true; cc=j + 4; dd=i - 1; if(IsEnemyGiraffe(dd, cc, k)) return true; cc=j + 4; dd=i + 1; if(IsEnemyGiraffe(dd, cc, k)) return true; cc=j - 1; dd=i - 4; if(IsEnemyGiraffe(dd, cc, k)) return true; cc=j - 1; dd=i + 4; if(IsEnemyGiraffe(dd, cc, k)) return true; cc=j + 1; dd=i - 4; if(IsEnemyGiraffe(dd, cc, k)) return true; cc=j + 1; dd=i + 4; if(IsEnemyGiraffe(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; cc=j + 1; for(dd=i + 1; (cc < 13) & (dd < 13);) if(MaybeBoard.sq_[dd][cc].side_==k) { cc=20; } else { if(IsEnemyBishop(dd, cc)) return true; if(MaybeBoard.sq_[dd][cc].piece_ !=0) cc=20; cc++; dd++; } cc=j + 1; for(dd=i - 1; (cc < 13) & (dd > 0);) if(MaybeBoard.sq_[dd][cc].side_==k) { cc=20; } else { if(IsEnemyBishop(dd, cc)) return true; if(MaybeBoard.sq_[dd][cc].piece_ !=0) cc=20; cc++; dd--; } cc=j - 1; for(dd=i + 1; (cc > 0) & (dd < 13);) 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; while(cc < 13) if(MaybeBoard.sq_[dd][cc].side_==k) { cc=20; } else { if(IsEnemyRook(dd, cc)) return true; if(MaybeBoard.sq_[dd][cc].piece_ !=0) cc=20; 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 < 13;) if(MaybeBoard.sq_[dd][cc].side_==k) { dd=20; } else { if(IsEnemyRook(dd, cc)) return true; if(MaybeBoard.sq_[dd][cc].piece_ !=0) dd=20; 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; 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 + 1; dd=i + 1; if(IsEnemyGriffin(dd, cc, k)) return true; cc=j + 1; dd=i - 1; if(IsEnemyGriffin(dd, cc, k)) return true; cc=j - 1; dd=i + 1; if(IsEnemyGriffin(dd, cc, k)) return true; cc=j - 1; dd=i - 1; if(IsEnemyGriffin(dd, cc, k)) return true; cc=j; dd=i + 3; if(IsEnemyLion(dd, cc, k)) return true; cc=j; dd=i - 3; if(IsEnemyLion(dd, cc, k)) return true; cc=j + 3; dd=i; if(IsEnemyLion(dd, cc, k)) return true; cc=j - 3; dd=i; if(IsEnemyLion(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) { cc=j + 1; dd=i; while(cc < 13) if(MaybeBoard.sq_[dd][cc].side_ !=0) { cc=20; } else { if(IsEnemyGriffin(dd + 1, cc + 1, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(IsEnemyGriffin(dd - 1, cc + 1, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(MaybeBoard.sq_[dd][cc].piece_ !=0) cc=20; cc++; } cc=j - 1; dd=i; while(cc > 0) if(MaybeBoard.sq_[dd][cc].side_ !=0) { cc=-1; } else { if(IsEnemyGriffin(dd + 1, cc - 1, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(IsEnemyGriffin(dd - 1, cc - 1, k) && 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 < 13;) if(MaybeBoard.sq_[dd][cc].side_ !=0) { dd=20; } else { if(IsEnemyGriffin(dd + 1, cc + 1, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(IsEnemyGriffin(dd + 1, cc - 1, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(MaybeBoard.sq_[dd][cc].piece_ !=0) dd=20; dd++; } cc=j; for(dd=i - 1; dd > 0;) if(MaybeBoard.sq_[dd][cc].side_ !=0) { dd=-1; } else { if(IsEnemyGriffin(dd - 1, cc + 1, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(IsEnemyGriffin(dd - 1, cc - 1, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; if(MaybeBoard.sq_[dd][cc].piece_ !=0) dd=-1; dd--; } cc=j - 4; dd=i - 1; if(IsEnemyGiraffe(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 4; dd=i + 1; if(IsEnemyGiraffe(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 4; dd=i - 1; if(IsEnemyGiraffe(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 4; dd=i + 1; if(IsEnemyGiraffe(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 1; dd=i - 4; if(IsEnemyGiraffe(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 1; dd=i + 4; if(IsEnemyGiraffe(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 1; dd=i - 4; if(IsEnemyGiraffe(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 1; dd=i + 4; if(IsEnemyGiraffe(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; cc=j + 1; for(dd=i + 1; (cc < 13) & (dd < 13);) if(MaybeBoard.sq_[dd][cc].side_==k) { cc=20; } 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=20; cc++; dd++; } cc=j + 1; for(dd=i - 1; (cc < 13) & (dd > 0);) if(MaybeBoard.sq_[dd][cc].side_==k) { cc=20; } 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=20; cc++; dd--; } cc=j - 1; for(dd=i + 1; (cc > 0) & (dd < 13);) 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; while(cc < 13) if(MaybeBoard.sq_[dd][cc].side_==k) { cc=20; } 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=20; 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 < 13;) if(MaybeBoard.sq_[dd][cc].side_==k) { dd=20; } 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=20; 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; 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 + 1; dd=i + 1; if(IsEnemyGriffin(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 1; dd=i - 1; if(IsEnemyGriffin(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 1; dd=i + 1; if(IsEnemyGriffin(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 1; dd=i - 1; if(IsEnemyGriffin(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j; dd=i + 3; if(IsEnemyLion(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j; dd=i - 3; if(IsEnemyLion(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j + 3; dd=i; if(IsEnemyLion(dd, cc, k) && MaybeBoard.sq_[dd][cc].strength() < MaybeBoard.sq_[i][j].strength()) return true; cc=j - 3; dd=i; if(IsEnemyLion(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 < 13; xxx++) for(yyy=1; yyy < 13; 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 void Archives() { ArchiveCounter=0; for(ff=1; ff < 13; ff++) for(ee=1; ee < 13; 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 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 < 13; xxx++) for(yyy=1; yyy < 13; 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 < 13; xxx++) for(yyy=1; yyy < 13; 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 3: // '\003' KnightCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 4: // '\004' BishopCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 5: // '\005' 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 -1: KingCount[NowBoard.sq_[yyy][xxx].side_]++; break; case -2: KingCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 118: // 'v' KnightCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 157: KnightCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 156: KnightCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 158: BishopCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 159: QueenCount[NowBoard.sq_[yyy][xxx].side_]++; break; case 31: // '\037' KnightCount[NowBoard.sq_[yyy][xxx].side_]++; break; } } public boolean DidICheckOrStalemateOrBareKing(Graphics g, int i) { if ((choiss==1)&(turncounter<47)){return false;} if(GameOver) return true; moveCounter=0; for(xx=1; (xx < 13) & (moveCounter==0); xx++) for(yy=1; (yy < 13) & (moveCounter==0); yy++) if(NowBoard.sq_[yy][xx].side_==3 - i) findPieceMoves(g, NowBoard.sq_[yy][xx], NowBoard, MaybeBoard); if(IsMySideInCheck(3 - i)) { NowBoard.sq_[yyy][xxx].piece_=-1; MaybeBoard.sq_[yyy][xxx].piece_=-1; if(moveCounter==0) { ShowStatusQ("Checkmate!"); GameOver=true; wins[i]=wins[i] + 1; return true; } ShowStatusQ("Check!"); } else if(moveCounter==0) { ShowStatusQ("Stalemated Side Loses!"); GameOver=true; wins[i]=wins[i] + 1; return true; } my_nonking_piece_count=0; your_nonking_piece_count=0; for(x_bare=1; x_bare < 13; x_bare++) for(y_bare=1; y_bare < 13; y_bare++) { if(NowBoard.sq_[y_bare][x_bare].piece_==-1) { if(NowBoard.sq_[y_bare][x_bare].side_==i) { myking_rank=y_bare; myking_file=x_bare; } if(NowBoard.sq_[y_bare][x_bare].side_ !=i) { yourking_rank=y_bare; yourking_file=x_bare; } } if(NowBoard.sq_[y_bare][x_bare].piece_ > 0) { if(NowBoard.sq_[y_bare][x_bare].side_==i) { my_other_piece_rank=y_bare; my_other_piece_file=x_bare; my_nonking_piece_count++; } if(NowBoard.sq_[y_bare][x_bare].side_ !=i) your_nonking_piece_count++; } } if(your_nonking_piece_count==0) { if((my_nonking_piece_count==1) & ((my_other_piece_rank - yourking_rank) * (my_other_piece_rank - yourking_rank) < 2) & ((my_other_piece_file - yourking_file) * (my_other_piece_file - yourking_file) < 2)) { ShowStatusQ("Two Bare Kings -- Draw"); drawn_games++; GameOver=true; return false; } if(i==1) { ShowStatusQ("White Wins -- Bare King"); wins[1]=wins[1] + 1; } if(i==2) { ShowStatusQ("Red Wins -- Bare King"); wins[2]=wins[2] + 1; } GameOver=true; return false; } else { return false; } } public void DisplayRules(Graphics g) { LowRectangle(g); g.drawString("An early Spanish variant. Lion is a 3,0 jumper. Unicorn first moves", 5, 405); g.drawString(" as a noncapturing knight, then becomes and remains a diagonal runner. ", 5, 421); g.drawString(" Crocodile is diagonal runer. Giraffe is 1,4 jumper. Griffin", 5, 437); g.drawString("moves 1,1 then orthogonal run on same turn. Promotion to file piece.", 5, 453); } public boolean DoesArchiveMatchNowBoard() { if(whoseMove !=ArchiveBoard[xxx].sq_[0][0].side_) return false; for(ff=1; ff < 13; ff++) for(ee=1; ee < 13; 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 < 13; ee++) for(ff=1; ff < 13; ff++) MaybeBoard.sq_[ff][ee].drawchsq2(g, 3); } public void DrawNowBoard(Graphics g) { for(x=1; x <=12; x++) for(y=1; y <=12; y++) { NowBoard.sq_[y][x].DrawChessSquare(g, 312, choiss, icanmove[y][x]); if ((choiss==1)&(turncounter<31)&(CanIPlaceASquare(y,x)==true)) {NowBoard.sq_[y][x].checkmark(g,312);} } } public void GenerateAttackersArrays() { for(zatt=1; zatt < 3; zatt++) for(yatt=1; yatt < 13; yatt++) for(xatt=1; xatt < 13; xatt++) { Attackers[yatt][xatt][zatt]=0; StrongestAttacker[yatt][xatt][zatt]=0; WeakestAttacker[yatt][xatt][zatt]=0; } for(yatt=1; yatt < 13; yatt++) for(xatt=1; xatt < 13; xatt++) { satt=NowBoard.sq_[yatt][xatt].side_; patt=NowBoard.sq_[yatt][xatt].piece_; if((patt==159) | (patt==80)) { if(NowBoard.sq_[xatt + 1][yatt + 1].piece_==0) { catt=xatt; datt=yatt; for(; catt < 13; catt++) { AddAnAttacker(); if((catt !=xatt) & (NowBoard.sq_[datt][catt].side_ !=0)) catt=20; } } if(NowBoard.sq_[xatt + 1][yatt - 1].piece_==0) { catt=xatt; datt=yatt; for(; catt < 13; catt++) { AddAnAttacker(); if((catt !=xatt) & (NowBoard.sq_[datt][catt].side_ !=0)) catt=20; } } if(NowBoard.sq_[xatt - 1][yatt + 1].piece_==0) { catt=xatt; datt=yatt; for(; catt > 0; catt--) { AddAnAttacker(); if((catt !=xatt) & (NowBoard.sq_[datt][catt].side_ !=0)) catt=-20; } } if(NowBoard.sq_[xatt - 1][yatt - 1].piece_==0) { catt=xatt; datt=yatt; for(; catt > 0; catt--) { AddAnAttacker(); if((catt !=xatt) & (NowBoard.sq_[datt][catt].side_ !=0)) catt=-20; } } if(NowBoard.sq_[xatt + 1][yatt + 1].piece_==0) { catt=xatt; for(datt=yatt; datt < 13; datt++) { AddAnAttacker(); if((datt !=yatt) & (NowBoard.sq_[datt][catt].side_ !=0)) datt=20; } } if(NowBoard.sq_[xatt - 1][yatt + 1].piece_==0) { catt=xatt; for(datt=yatt; datt < 13; datt++) { AddAnAttacker(); if((datt !=yatt) & (NowBoard.sq_[datt][catt].side_ !=0)) datt=20; } } if(NowBoard.sq_[xatt + 1][yatt - 1].piece_==0) { catt=xatt; for(datt=yatt; datt > 0; datt--) { AddAnAttacker(); if((datt !=yatt) & (NowBoard.sq_[datt][catt].side_ !=0)) datt=-20; } } if(NowBoard.sq_[xatt - 1][yatt - 1].piece_==0) { catt=xatt; for(datt=yatt; datt > 0; datt--) { AddAnAttacker(); if((datt !=yatt) & (NowBoard.sq_[datt][catt].side_ !=0)) datt=-20; } } } if(patt==31) { catt=xatt + 1; datt=yatt + 4; AddAnAttacker(); catt=xatt + 1; datt=yatt - 4; AddAnAttacker(); catt=xatt - 1; datt=yatt + 4; AddAnAttacker(); catt=xatt - 1; datt=yatt - 4; AddAnAttacker(); catt=xatt + 4; datt=yatt + 1; AddAnAttacker(); catt=xatt + 4; datt=yatt - 1; AddAnAttacker(); catt=xatt - 4; datt=yatt + 1; AddAnAttacker(); catt=xatt - 4; datt=yatt - 1; AddAnAttacker(); } if(patt==3) { 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==158) | (patt==157) | (patt==9) | (patt==4)| (patt==-9) | (patt==21) | (patt==28) | (patt==104) | (patt==109)) { catt=xatt; for(datt=yatt; (catt < 13) & (datt < 13); datt++) { AddAnAttacker(); if((catt !=xatt) & (NowBoard.sq_[datt][catt].side_ !=0)) catt=20; catt++; } catt=xatt; for(datt=yatt; (catt > 0) & (datt < 13); datt++) { AddAnAttacker(); if((catt !=xatt) & (NowBoard.sq_[datt][catt].side_ !=0)) catt=-20; catt--; } catt=xatt; for(datt=yatt; (catt < 13) & (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==5) | (patt==6)| (patt==9)) { catt=xatt; datt=yatt; for(; catt < 13; 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 < 13; 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==159) { 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==118) { catt=xatt + 3; datt=yatt; AddAnAttacker(); catt=xatt - 3; datt=yatt; AddAnAttacker(); catt=xatt; datt=yatt + 3; AddAnAttacker(); catt=xatt; datt=yatt - 3; AddAnAttacker(); } if(patt==22) { catt=xatt + 2; datt=yatt + 2; AddAnAttacker(); catt=xatt + 2; datt=yatt - 2; AddAnAttacker(); catt=xatt - 2; datt=yatt + 2; AddAnAttacker(); catt=xatt - 2; datt=yatt - 2; AddAnAttacker(); } if(patt < 0) { 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==1) { 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(); } } } } public int HowFar(Chsq chsq) { if(chsq.piece_==76) { if(chsq.rank_==d[depth]) return 0; if(chsq.file_==c[depth]) return 0; } how_far_am_i=chsq.file_ - c[depth]; if(c[depth] - chsq.file_ > how_far_am_i) how_far_am_i=c[depth] - chsq.file_; if(d[depth] - chsq.rank_ > how_far_am_i) how_far_am_i=d[depth] - chsq.rank_; if(chsq.rank_ - d[depth] > how_far_am_i) how_far_am_i=chsq.rank_ - d[depth]; return how_far_am_i; } public boolean HumanMoveAPiece(Graphics g, int i, int j) { if ((choiss==1)&(turncounter<31)) { TotalBackBoard(); who_backed=whoseMove; markingAPiece=true; TotalMaybeBoard(NowBoard,MaybeBoard); DrawNowBoard(g); return true; } moveto_rank=i; moveto_file=j; if((mover_rank==moveto_rank) & (mover_file==moveto_file)) { markingAPiece=true; whatpiecescanmove(g); return false; } if(!IsMyMoveListed()) return false; TotalBackBoard(); who_backed=whoseMove; NormalMove(g); DidICheckOrStalemateOrBareKing(g, whoseMove); markingAPiece=true; TotalMaybeBoard(NowBoard,MaybeBoard); DrawNowBoard(g); return true; } public boolean IsEnemyBishop(int i, int j) { if((j > 12) | (j < 1) | (i > 12) | (i < 1)) return false; if ( (MaybeBoard.sq_[i][j].piece_==158)| (MaybeBoard.sq_[i][j].piece_==157)| (MaybeBoard.sq_[i][j].piece_==9)| (MaybeBoard.sq_[i][j].piece_==4)) { assailant_rank=i; assailant_file=j; return true; } return false; } public boolean IsEnemyKnight(int i, int j, int k) { if((j > 12) | (j < 1) | (i > 12) | (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; } return false; } public boolean IsEnemyGiraffe(int i, int j, int k) { if((j > 12) | (j < 1) | (i > 12) | (i < 1)) return false; if(MaybeBoard.sq_[i][j].side_==k) return false; if(MaybeBoard.sq_[i][j].piece_==31) { assailant_rank=i; assailant_file=j; return true; } else { return false; } } public boolean IsEnemyGriffin(int i, int j, int k) { if((j > 12) | (j < 1) | (i > 12) | (i < 1)) return false; if(MaybeBoard.sq_[i][j].side_==k) return false; if(MaybeBoard.sq_[i][j].piece_==159) { assailant_rank=i; assailant_file=j; return true; } if(MaybeBoard.sq_[i][j].piece_==80) { assailant_rank=i; assailant_file=j; return true; } else { return false; } } public boolean IsEnemyKing(int i, int j, int k) { if((j > 12) | (j < 1) | (i > 12) | (i < 1)) return false; if(MaybeBoard.sq_[i][j].side_==k) return false; if(MaybeBoard.sq_[i][j].piece_ < 0) { assailant_rank=i; assailant_file=j; return true; } else { return false; } } public boolean IsEnemyLion(int i, int j, int k) { if((j > 12) | (j < 1) | (i > 12) | (i < 1)) return false; if(MaybeBoard.sq_[i][j].side_==k) return false; if(MaybeBoard.sq_[i][j].piece_==118) { assailant_rank=i; assailant_file=j; return true; } else { return false; } } public boolean IsEnemyPawn(int i, int j, int k) { if((j > 12) | (j < 1) | (i > 12) | (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; } else { return false; } } public boolean IsEnemyRook(int i, int j) { if((j > 12) | (j < 1) | (i > 12) | (i < 1)) return false; if((MaybeBoard.sq_[i][j].piece_==5)|(MaybeBoard.sq_[i][j].piece_==9)) { 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)) return true; return false; } public boolean IsMySideInCheck(int i) { for(xxx=1; xxx < 13; xxx++) for(yyy=1; yyy < 13; yyy++) if((i==MaybeBoard.sq_[yyy][xxx].side_) & (MaybeBoard.sq_[yyy][xxx].piece_ < 0) && AmIUnderAttack(yyy, xxx, i)) return true; return false; } public boolean KeepMoving(Graphics g, Chsq chsq, CB14_14 cb14_14, CB14_14 cb14_14_1) { if(chsq.piece_==47) { if((c[depth] - chsq.file_ > d[depth] - chsq.rank_) & (c[depth] - chsq.file_ > chsq.rank_ - d[depth]) & (c[depth] - chsq.file_ > d[depth] - chsq.rank_) && NowBoard.sq_[d[depth]][c[depth] - 1].piece_ !=0) return false; if((d[depth] - chsq.rank_ > c[depth] - chsq.file_) & (d[depth] - chsq.rank_ > chsq.rank_ - d[depth]) & (d[depth] - chsq.rank_ > chsq.file_ - c[depth]) && NowBoard.sq_[d[depth] - 1][c[depth]].piece_ !=0) return false; if((chsq.file_ - c[depth] > d[depth] - chsq.rank_) & (chsq.file_ - c[depth] > chsq.rank_ - d[depth]) & (chsq.file_ - c[depth] > c[depth] - chsq.file_) && NowBoard.sq_[d[depth]][c[depth] + 1].piece_ !=0) return false; if((chsq.rank_ - d[depth] > d[depth] - chsq.rank_) & (chsq.rank_ - d[depth] > chsq.file_ - c[depth]) & (chsq.rank_ - d[depth] > c[depth] - chsq.file_) && NowBoard.sq_[d[depth] + 1][c[depth]].piece_ !=0) return false; } switch(chsq.piece_) { case 125: // '}' if(HowFar(chsq) > 2) return false; break; case 126: // '~' if(HowFar(chsq) > 2) return false; break; case 135: if(HowFar(chsq) > 3) return false; break; case 136: if(HowFar(chsq) > 3) return false; break; case 145: if(HowFar(chsq) > 4) return false; break; case 146: if(HowFar(chsq) > 4) return false; break; case 111: // 'o' if(HowFar(chsq) > 2) return false; break; case 76: // 'L' if(HowFar(chsq) > 2) return false; break; case 112: // 'p' if(HowFar(chsq) > 3) return false; break; case 113: // 'q' if(HowFar(chsq) > 4) return false; break; case 114: // 'r' if(HowFar(chsq) > 2) return false; break; case 117: // 'u' if(HowFar(chsq) > 2) return false; break; case 115: // 's' if(HowFar(chsq) > 3) return false; break; case 116: // 't' if(HowFar(chsq) > 4) return false; break; case 98: // 'b' if(HowFar(chsq) > 4) return false; break; } return (MaybeAdd(g, chsq, cb14_14, cb14_14_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]) & (chsq.piece_ !=-15) & (chsq.piece_ !=-62) & (chsq.piece_ !=-61); } public void LowRectangle(Graphics g) { g.setColor(niceblue); g.fillRect(0, 391, 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); g.setColor(Color.black); g.setFont(f1); } public boolean MachineMoves(Graphics g, int i) { if ((choiss==1)&(turncounter<31)) { do { y=1 + (int)Math.floor(Math.random() * 12); x=1 + (int)Math.floor(Math.random() * 12); } while (CanIPlaceASquare(y,x)==false); NowBoard.sq_[y][x].piece_=0;NowBoard.sq_[y][x].side_=0; DrawNowBoard(g); return true; } if ((choiss==1)&(turncounter<47)) { do { y=1 + (int)Math.floor(Math.random() * 12); x=1 + (int)Math.floor(Math.random() * 12); } while ( (NowBoard.sq_[y][x].piece_!=0) |((whoseMove==1)&(y>barriers[1])) |((whoseMove==2)&(y0)) ) ; switch(turncounter){ case 46:{NowBoard.sq_[y][x].piece_=-1;break;} case 45:{NowBoard.sq_[y][x].piece_=9;break;} case 44:{NowBoard.sq_[y][x].piece_=5;break;} case 43:{NowBoard.sq_[y][x].piece_=5;break;} case 42:{NowBoard.sq_[y][x].piece_=4;break;} case 41:{NowBoard.sq_[y][x].piece_=4;break;} case 40:{NowBoard.sq_[y][x].piece_=3;break;} case 39:{NowBoard.sq_[y][x].piece_=3;break;} default:{NowBoard.sq_[y][x].piece_=1;break;} } NowBoard.sq_[y][x].side_=whoseMove; DrawNowBoard(g); return true; } NegateGMCounts();goodmove1=0; goodmove2=0; goodmove3=0; goodmove4=0; goodmove5=0; goodmove6=0; goodmove7=0; goodmove8=0; goodmove9=0; goodmove10=0; 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] < 13; x_run[1]++) for(y_run[1]=1; y_run[1] < 13; 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(); 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_; } NormalMove(g); NowBoard.sq_[mover_rank][mover_file].DrawChessSquare(g, 312, choiss, false); NowBoard.sq_[moveto_rank][moveto_file].DrawChessSquare(g, 312, choiss, 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_; DidICheckOrStalemateOrBareKing(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, CB14_14 cb14_14, CB14_14 cb14_14_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] > 12) | (d[depth] < 1) | (d[depth] > 12)) return false; if((chsq.piece_==156) & (NowBoard.sq_[d[depth]][c[depth]].piece_ !=0)) return false; if(NowBoard.sq_[d[depth]][c[depth]].side_==chsq.side_) return false; if(NowBoard.sq_[d[depth]][c[depth]].side_==3) return false; alterMaybeBoard(g, chsq, cb14_14.sq_[d[depth]][c[depth]], cb14_14, cb14_14_1); worried=AmIWorried(chsq.side_); if(IsMySideInCheck(chsq.side_)) { unalterMaybeBoard(g, chsq, cb14_14.sq_[d[depth]][c[depth]], cb14_14, cb14_14_1); CheckSquare[depth]=true; if(NowBoard.sq_[d[depth]][c[depth]].piece_ !=0) SquatterOnCheckSquare[depth]=true; return false; } good_move=1; if(IsMySideInCheck(3 - chsq.side_)) good_move +=5; if(NowBoard.sq_[d[depth]][c[depth]].piece_==5) good_move +=15; if(NowBoard.sq_[d[depth]][c[depth]].piece_==156) good_move +=10; 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 +=15; 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 ) { // SquatterOnCheckSquare[depth]=true; SquatterOnCheckSquare[depth]=false; if(NowBoard.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, cb14_14.sq_[d[depth]][c[depth]], cb14_14, cb14_14_1); return false; } } good_counter=1; if(moveCounter > 500) good_move=1; for(; good_counter <=good_move; good_counter++) { moveCounter++; if ((choiss==1)&(NowBoard.sq_[d[depth]][c[depth]].piece_<0)) { System.out.print("Oops!");wins[chsq.side_]++;GameOver=true;return true; } 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_=cb14_14.sq_[d[depth]][c[depth]]; } 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]].piece_==5) | (NowBoard.sq_[d[depth]][c[depth]].piece_==6)) && (Math.random() * 100D < 98D && !worried)) AssignGoodMove7(); if(((chsq.piece_ < 5) | (chsq.piece_==22) | (chsq.piece_==23)) & ((NowBoard.sq_[d[depth]][c[depth]].piece_==5) | (NowBoard.sq_[d[depth]][c[depth]].piece_==6)) && (Math.random() * 100D < 98D && !worried)) AssignGoodMove6(); if(((chsq.piece_==6) | (chsq.piece_==5)) & (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]].piece_==156) | (NowBoard.sq_[d[depth]][c[depth]].piece_==158) | (NowBoard.sq_[d[depth]][c[depth]].piece_==157) | (NowBoard.sq_[d[depth]][c[depth]].piece_==22) | (NowBoard.sq_[d[depth]][c[depth]].piece_==23)) && (Math.random() * 100D < 79D && !worried)) AssignGoodMove4(); if((chsq.piece_ < 3) & ((NowBoard.sq_[d[depth]][c[depth]].piece_==156) | (NowBoard.sq_[d[depth]][c[depth]].piece_==158) | (NowBoard.sq_[d[depth]][c[depth]].piece_==157) | (NowBoard.sq_[d[depth]][c[depth]].piece_==22) | (NowBoard.sq_[d[depth]][c[depth]].piece_==23)) && (Math.random() * 100D < 76D && !worried)) AssignGoodMove3(); if((AmIUnderAttack(d[depth],c[depth],whoseMove)==false) & (IsMySideInCheck(3 - chsq.side_)) && (Math.random() * 100D < 74D && !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((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 < 71D && !worried)) AssignGoodMove1(); if((fifty_move_rule > 4) & (chsq.pawn()) & (Math.random() * 100D < 10D) & (!worried) & (AmIUnderAttack(d[depth],c[depth],whoseMove)==false)) AssignGoodMove1(); if((worried) & (IsThisAGoodMove()==false) & (moveCounter > 1) & (!WhoIsHuman[whoseMove])) moveCounter--; unalterMaybeBoard(g, chsq, cb14_14.sq_[d[depth]][c[depth]], cb14_14, cb14_14_1); return NowBoard.sq_[d[depth]][c[depth]].side_==0; } public void AssignVariantName(){ variant_name="Grand Acedrex"; } public void NameThisChessVariant(Graphics g) { AssignVariantName(); g.drawString(variant_name, 5, 15); g.drawString("About:", 330, 15); } public void NextOrdinaryPlayer(Graphics g) { 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(); if (choiss==1) { ShowStatusNothing(); if ((turncounter==31)&(whoseMove==1)){GetYourLimits();} } whatpiecescanmove(g); } public void GetYourLimits(){ b=0; ff=1;while (ff<13){ ee=1;while (ee<13){ if (NowBoard.sq_[ff][ee].piece_==0) { b++; if (b==32){x=ff;} if (b==33){y=ff;} } ee++;}ff++;} if (x==y) { barriers[2]=x+1; barriers[1]=x-1; } else { barriers[1]=x; barriers[2]=y; } } public void NormalMove(Graphics g) { //**System.out.println(""+NowBoard.sq_[mover_rank][mover_file].piece_+" "+mover_rank+""+mover_file+" "+moveto_rank+""+moveto_file); if(NowBoard.sq_[mover_rank][mover_file].piece_ < 0) { KingRank[whoseMove]=moveto_rank; KingFile[whoseMove]=moveto_file; } if((NowBoard.sq_[moveto_rank][moveto_file].piece_ > 0) | (NowBoard.sq_[mover_rank][mover_file].piece_==1)) { fifty_move_rule=0; } else { fifty_move_rule++; if(fifty_move_rule > fifties_got_to) fifties_got_to=fifty_move_rule; } NowBoard.sq_[moveto_rank][moveto_file].side_=NowBoard.sq_[mover_rank][mover_file].side_; NowBoard.sq_[moveto_rank][moveto_file].piece_=NowBoard.sq_[mover_rank][mover_file].piece_; Promotions(); if(NowBoard.sq_[moveto_rank][moveto_file].piece_==156) NowBoard.sq_[moveto_rank][moveto_file].piece_=157; NowBoard.sq_[mover_rank][mover_file].side_=0; NowBoard.sq_[mover_rank][mover_file].piece_=0; for(xxx=1; xxx < 13; xxx++) for(yyy=1; yyy < 13; yyy++) { MaybeBoard.sq_[yyy][xxx].side_=NowBoard.sq_[yyy][xxx].side_; MaybeBoard.sq_[yyy][xxx].piece_=NowBoard.sq_[yyy][xxx].piece_; } ShowStatusNothing(); Archives(); if(NowBoard.sq_[moveto_rank][moveto_file].piece_==-1 && (NowBoard.sq_[moveto_rank][moveto_file].side_==1) & (moveto_rank==12) | (NowBoard.sq_[moveto_rank][moveto_file].side_==2) & (moveto_rank==1)) { drawn_games++; GameOver=true; ShowStatusQ("Draw!"); return; } else { inquire_about_terms(); if (WhoIsHuman[whoseMove]==true){SayWhoIsHuman(g);} return; } } public void SayWhoIsHuman(Graphics g) { g.setColor(niceblue); g.fillRect(0, 391, 300, 94); g.setColor(Color.black); g.setFont(f1); g.drawString("White:", 10, 410); g.drawString("Red:", 10, 430); g.drawString("Computer", 120, 410); g.drawString("Computer", 120, 430); g.drawString("Human", 60, 410); g.drawString("Human", 60, 430); variant_name="Grand Acedrex"; g.setFont(f1);NameThisChessVariant(g); switch(who_is_winning) { case 1: // '\001' g.drawString("White wins", 30, 450); break; case 2: // '\002' g.drawString("Red wins", 30, 450); break; case 3: // '\003' g.drawString("Draw", 30, 450); break; } if(who_is_winning > 0) g.drawString("Continue Game", 150, 450); if(who_is_winning > 0) { if(accepted_terms) { g.drawRect(26, 436, 67, 18); g.drawRect(27, 437, 65, 16); } if(!accepted_terms) { g.drawRect(147, 436, 95, 18); g.drawRect(148, 437, 93, 16); } } g.drawString("White " + wins[1] + " Red " + wins[2] + " Drawn " + drawn_games, 5, 480); g.setFont(f3); g.drawString("--Ed Friedlander", 235, 480); g.setFont(f2); if(humanizing) g.drawString("OKAY", 210, 420); g.setColor(Color.white); if(WhoIsHuman[1]) { g.drawRect(56, 396, 48, 18); g.drawRect(57, 397, 46, 16); } if(!WhoIsHuman[1]) { g.drawRect(117, 396, 61, 18); g.drawRect(118, 397, 59, 16); } g.setColor(Color.red); if(WhoIsHuman[2]) { g.drawRect(56, 416, 48, 18); g.drawRect(57, 417, 46, 16); } if(!WhoIsHuman[2]) { g.drawRect(117, 416, 61, 18); g.drawRect(118, 417, 59, 16); } } public void ShowStatusNothing() { if(!GameOver) ShowStatusQ(""); if (choiss==1) { if (turncounter<31){ShowStatusQ("Place a square!");} if (turncounter==46){ShowStatusQ("Place your king!");} if (turncounter==45){ShowStatusQ("Place your queen!");} if (turncounter==44){ShowStatusQ("Place a rook!");} if (turncounter==43){ShowStatusQ("Place a rook!");} if (turncounter==42){ShowStatusQ("Place a bishop!");} if (turncounter==41){ShowStatusQ("Place a bishop!");} if (turncounter==40){ShowStatusQ("Place a knight!");} if (turncounter==39){ShowStatusQ("Place a knight!");} if (turncounter==38){ShowStatusQ("Place a pawn!");} if (turncounter==37){ShowStatusQ("Place a pawn!");} if (turncounter==36){ShowStatusQ("Place a pawn!");} if (turncounter==35){ShowStatusQ("Place a pawn!");} if (turncounter==34){ShowStatusQ("Place a pawn!");} if (turncounter==33){ShowStatusQ("Place a pawn!");} if (turncounter==32){ShowStatusQ("Place a pawn!");} if (turncounter==31){ShowStatusQ("Place a pawn!");} } } public void get_choiss(){choiss=3;} public void StartUp(Graphics g) { get_choiss(); accepted_terms=false; who_is_winning=0; turncounter=1;saved_fifty_move_rule=0;saved_turncounter=1;ShowStatusNothing(); for(a=1; a < 13; a++) for(b=1; b < 13; b++) { NowBoard.sq_[b][a].piece_=0; NowBoard.sq_[b][a].side_=0; } NowBoard.sq_[1][1].piece_=5; NowBoard.sq_[1][2].piece_=118; NowBoard.sq_[1][3].piece_=156; NowBoard.sq_[1][4].piece_=31; NowBoard.sq_[1][5].piece_=158; NowBoard.sq_[1][6].piece_=-1; NowBoard.sq_[1][7].piece_=159; NowBoard.sq_[1][8].piece_=158; NowBoard.sq_[1][9].piece_=31; NowBoard.sq_[1][10].piece_=156; NowBoard.sq_[1][11].piece_=118; NowBoard.sq_[1][12].piece_=5; NowBoard.sq_[12][1].piece_=5; NowBoard.sq_[12][2].piece_=118; NowBoard.sq_[12][3].piece_=156; NowBoard.sq_[12][4].piece_=31; NowBoard.sq_[12][5].piece_=158; NowBoard.sq_[12][6].piece_=-1; NowBoard.sq_[12][7].piece_=159; NowBoard.sq_[12][8].piece_=158; NowBoard.sq_[12][9].piece_=31; NowBoard.sq_[12][10].piece_=156; NowBoard.sq_[12][11].piece_=118; NowBoard.sq_[12][12].piece_=5; for(x=1; x < 13; x++) { NowBoard.sq_[4][x].side_=1; NowBoard.sq_[1][x].side_=1; NowBoard.sq_[4][x].piece_=1; NowBoard.sq_[9][x].side_=2; NowBoard.sq_[12][x].side_=2; NowBoard.sq_[9][x].piece_=1; } if (choiss==1){ x=1;while (x<13){ y=1;while (y<13){ NowBoard.sq_[y][x].piece_=74; NowBoard.sq_[y][x].side_=3; y++;}x++;} NowBoard.sq_[6][6].piece_=0;NowBoard.sq_[6][6].side_=0; NowBoard.sq_[6][7].piece_=0;NowBoard.sq_[6][7].side_=0; NowBoard.sq_[7][6].piece_=0;NowBoard.sq_[7][6].side_=0; NowBoard.sq_[7][7].piece_=0;NowBoard.sq_[7][7].side_=0; } TotalMaybeBoard(NowBoard,MaybeBoard); whoseMove=1; whatpiecescanmove(g); GameOver=false; fifty_move_rule=0; TotalSaveBoard(); TotalBackBoard(); } public void TotalMaybeBoard(CB14_14 cb14_14, CB14_14 cb14_14_1) { for(x=1; x <=12; x++) for(y=1; y <=12; y++) { cb14_14_1.sq_[y][x].piece_=cb14_14.sq_[y][x].piece_; cb14_14_1.sq_[y][x].side_=cb14_14.sq_[y][x].side_; } } public void UnTwoThePawns(int i) { } public void ZeroAllFiveCounts() { PawnCount[0]=0; QueenCount[0]=0; KingCount[0]=0; RookCount[0]=0; BishopCount[0]=0; KnightCount[0]=0; PawnCount[1]=0; QueenCount[1]=0; KingCount[1]=0; RookCount[1]=0; BishopCount[1]=0; KnightCount[1]=0; PawnCount[2]=0; KingCount[2]=0; QueenCount[2]=0; RookCount[2]=0; BishopCount[2]=0; KnightCount[2]=0; } public void alterMaybeBoard(Graphics g, Chsq chsq, Chsq chsq1, CB14_14 cb14_14, CB14_14 cb14_14_1) { cb14_14_1.sq_[chsq.rank_][chsq.file_].piece_=0; cb14_14_1.sq_[chsq.rank_][chsq.file_].side_=0; cb14_14_1.sq_[chsq1.rank_][chsq1.file_].piece_=cb14_14.sq_[chsq.rank_][chsq.file_].piece_; cb14_14_1.sq_[chsq1.rank_][chsq1.file_].side_=cb14_14.sq_[chsq.rank_][chsq.file_].side_; } public boolean findPieceMoves(Graphics g, Chsq chsq, CB14_14 cb14_14, CB14_14 cb14_14_1) { CheckSquare[depth]=false; SquatterOnCheckSquare[depth]=false; if((chsq.piece_==9) |(chsq.piece_==4) | (chsq.piece_==158) | (chsq.piece_==157) | (chsq.piece_==21) | (chsq.piece_==28) | (chsq.piece_==109) | (chsq.piece_==104)) { c[depth]=chsq.file_ - 1; for(d[depth]=chsq.rank_ - 1; (MaybeAdd(g, chsq, cb14_14, cb14_14_1)) | (CheckSquare[depth]) & (chsq.piece_ !=-9) & (!SquatterOnCheckSquare[depth]); d[depth]=d[depth] - 1) c[depth]=c[depth] - 1; } if((chsq.piece_==9) |(chsq.piece_==4) | (chsq.piece_==158) | (chsq.piece_==157) | (chsq.piece_==21) | (chsq.piece_==28) | (chsq.piece_==109) | (chsq.piece_==104)) { c[depth]=chsq.file_ - 1; for(d[depth]=chsq.rank_ + 1; (MaybeAdd(g, chsq, cb14_14, cb14_14_1)) | (CheckSquare[depth]) & (chsq.piece_ !=-9) & (!SquatterOnCheckSquare[depth]); d[depth]=d[depth] + 1) c[depth]=c[depth] - 1; } if((chsq.piece_==9) |(chsq.piece_==4) | (chsq.piece_==158) | (chsq.piece_==157) | (chsq.piece_==21) | (chsq.piece_==28) | (chsq.piece_==109) | (chsq.piece_==104)) { c[depth]=chsq.file_ + 1; for(d[depth]=chsq.rank_ - 1; (MaybeAdd(g, chsq, cb14_14, cb14_14_1)) | (CheckSquare[depth]) & (chsq.piece_ !=-9) & (!SquatterOnCheckSquare[depth]); d[depth]=d[depth] - 1) c[depth]=c[depth] + 1; } if((chsq.piece_==9) |(chsq.piece_==4) | (chsq.piece_==158) | (chsq.piece_==157) | (chsq.piece_==21) | (chsq.piece_==28) | (chsq.piece_==109) | (chsq.piece_==104)) { c[depth]=chsq.file_ + 1; for(d[depth]=chsq.rank_ + 1; (MaybeAdd(g, chsq, cb14_14, cb14_14_1)) | (CheckSquare[depth]) & (chsq.piece_ !=-9) & (!SquatterOnCheckSquare[depth]); d[depth]=d[depth] + 1) c[depth]=c[depth] + 1; } if((chsq.piece_==159) | (chsq.piece_==80)) { if((chsq.rank_ < 12) & (chsq.file_ < 12) && NowBoard.sq_[chsq.rank_ + 1][chsq.file_ + 1].piece_==0) { c[depth]=chsq.file_ + 1; for(d[depth]=chsq.rank_ + 2; KeepMoving(g, chsq, cb14_14, cb14_14_1); d[depth]++); c[depth]=chsq.file_ + 2; for(d[depth]=chsq.rank_ + 1; KeepMoving(g, chsq, cb14_14, cb14_14_1); c[depth]++); } if((chsq.rank_ > 1) & (chsq.file_ < 12) && NowBoard.sq_[chsq.rank_ - 1][chsq.file_ + 1].piece_==0) { c[depth]=chsq.file_ + 1; for(d[depth]=chsq.rank_ - 2; KeepMoving(g, chsq, cb14_14, cb14_14_1); d[depth]=d[depth] - 1); c[depth]=chsq.file_ + 2; for(d[depth]=chsq.rank_ - 1; KeepMoving(g, chsq, cb14_14, cb14_14_1); c[depth]++); } if((chsq.rank_ < 12) & (chsq.file_ > 1) && NowBoard.sq_[chsq.rank_ + 1][chsq.file_ - 1].piece_==0) { c[depth]=chsq.file_ - 1; for(d[depth]=chsq.rank_ + 2; KeepMoving(g, chsq, cb14_14, cb14_14_1); d[depth]++); c[depth]=chsq.file_ - 2; for(d[depth]=chsq.rank_ + 1; KeepMoving(g, chsq, cb14_14, cb14_14_1); c[depth]=c[depth] - 1); } if((chsq.rank_ > 1) & (chsq.file_ > 1) && NowBoard.sq_[chsq.rank_ - 1][chsq.file_ - 1].piece_==0) { c[depth]=chsq.file_ - 1; for(d[depth]=chsq.rank_ - 2; KeepMoving(g, chsq, cb14_14, cb14_14_1); d[depth]=d[depth] - 1); c[depth]=chsq.file_ - 2; for(d[depth]=chsq.rank_ - 1; KeepMoving(g, chsq, cb14_14, cb14_14_1); c[depth]=c[depth] - 1); } } if((chsq.piece_==5)|(chsq.piece_==9)) { c[depth]=chsq.file_ - 1; for(d[depth]=chsq.rank_; (MaybeAdd(g, chsq, cb14_14, cb14_14_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]); c[depth]=c[depth] - 1); } if((chsq.piece_==5)|(chsq.piece_==9)) { c[depth]=chsq.file_ + 1; for(d[depth]=chsq.rank_; (MaybeAdd(g, chsq, cb14_14, cb14_14_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]); c[depth]++); } if((chsq.piece_==5)|(chsq.piece_==9)) { c[depth]=chsq.file_; for(d[depth]=chsq.rank_ - 1; (MaybeAdd(g, chsq, cb14_14, cb14_14_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]); d[depth]=d[depth] - 1); } if((chsq.piece_==5)|(chsq.piece_==9)) { c[depth]=chsq.file_; for(d[depth]=chsq.rank_ + 1; (MaybeAdd(g, chsq, cb14_14, cb14_14_1)) | (CheckSquare[depth]) & (!SquatterOnCheckSquare[depth]); d[depth]++); } if(chsq.piece_==31) { c[depth]=chsq.file_ - 4; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ - 4; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ + 4; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ + 4; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ - 4; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ + 4; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ - 4; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ + 4; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==3) { c[depth]=chsq.file_ - 2; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ - 2; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ + 2; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ + 2; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ - 2; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ + 2; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ - 2; MaybeAdd(g, chsq, cb14_14, cb14_14_1); c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ + 2; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==-1) { c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==-1) { c[depth]=chsq.file_; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==-1) { c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==-1) { c[depth]=chsq.file_; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==-1) { c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==-1) { c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==-1) { c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==-1) { c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==156) { c[depth]=chsq.file_ - 2; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==156) { c[depth]=chsq.file_ - 2; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==156) { c[depth]=chsq.file_ + 2; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==156) { c[depth]=chsq.file_ + 2; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==156) { c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ - 2; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==156) { c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ + 2; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==156) { c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ - 2; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==156) { c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ + 2; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==159) { c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==159) { c[depth]=chsq.file_ + 1; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==159) { c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==159) { c[depth]=chsq.file_ - 1; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==118) { c[depth]=chsq.file_ + 3; d[depth]=chsq.rank_; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==118) { c[depth]=chsq.file_ - 3; d[depth]=chsq.rank_; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==118) { c[depth]=chsq.file_; d[depth]=chsq.rank_ + 3; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==118) { c[depth]=chsq.file_; d[depth]=chsq.rank_ - 3; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==22) { c[depth]=chsq.file_ + 2; d[depth]=chsq.rank_ + 2; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==22) { c[depth]=chsq.file_ + 2; d[depth]=chsq.rank_ - 2; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==22) { c[depth]=chsq.file_ - 2; d[depth]=chsq.rank_ + 2; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.piece_==22) { c[depth]=chsq.file_ - 2; d[depth]=chsq.rank_ - 2; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if((chsq.piece_==1) | (chsq.piece_==2)) { if((chsq.side_==1) & (chsq.rank_ < 12)) { if(NowBoard.sq_[chsq.rank_ + 1][chsq.file_].piece_==0) { c[depth]=chsq.file_; d[depth]=chsq.rank_ + 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.file_ > 1 && (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, cb14_14, cb14_14_1); } if(chsq.file_ < 12 && (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, cb14_14, cb14_14_1); } } if((chsq.side_==2) & (chsq.rank_ > 1)) { if(NowBoard.sq_[chsq.rank_ - 1][chsq.file_].piece_==0) { c[depth]=chsq.file_; d[depth]=chsq.rank_ - 1; MaybeAdd(g, chsq, cb14_14, cb14_14_1); } if(chsq.file_ > 1 && (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, cb14_14, cb14_14_1); } if(chsq.file_ < 12 && (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, cb14_14, cb14_14_1); } } } return true; } public void init() { seek_sacrificial_wins=false; halt_if_king_taken=true; PawnCount=new int[4]; KnightCount=new int[4]; BishopCount=new int[4]; RookCount=new int[4]; QueenCount=new int[4]; KingCount=new int[4]; term_counts=new int[5]; best_four_count=new int[7]; KingRank=new int[5]; KingFile=new int[5]; Attackers=new int[13][13][3]; StrongestAttacker=new int[13][13][3]; WeakestAttacker=new int[13][13][3]; NowBoard=new CB14_14(314); SaveBoard=new CB14_14(314); BackBoard=new CB14_14(314); icanmove=new boolean[14][14]; MaybeBoard=new CB14_14(314); OneBoard=new CB14_14(314); TwoBoard=new CB14_14(314); ThreeBoard=new CB14_14(314); FourBoard=new CB14_14(314); ArchiveBoard=new CB14_14[102]; happySquare=new Chsq(1, 1, 5, 1); niceblue=new Color(0, 192, 255); MaybeMoves=new Chmo[1001]; 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]; barriers=new int[3]; depth=0; WhoIsHuman[1]=true; WhoIsHuman[2]=false; GameOver=false; drawn_games=0; Graphics g=getGraphics(); setBackground(niceblue); markingAPiece=true; for(a=1; a <=1000; a++) MaybeMoves[a]=new Chmo(); WhoIsHuman[0]=true; WhoIsHuman[1]=true; WhoIsHuman[2]=false; wins[0]=0; wins[1]=0; wins[2]=0; StartUp(g); millipede1=System.currentTimeMillis();for (xxx=0;xxx<102;xxx++){ArchiveBoard[xxx]=new CB14_14(314);} millipede2=System.currentTimeMillis(); how_deep_to_seek=1; } 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 boolean markAPiece(Graphics g, int i, int j) { if (choiss==1) { if (turncounter<31) { if (NowBoard.sq_[i][j].piece_!=74){return false;} if (CanIPlaceASquare(i,j)==false){return false;} TotalBackBoard();// seems not to work NowBoard.sq_[i][j].piece_=0;NowBoard.sq_[i][j].side_=0; DrawNowBoard(g); NextOrdinaryPlayer(g); return true; } if (turncounter<47) { if (NowBoard.sq_[i][j].piece_!=0){return false;} if ((whoseMove==1)&(i>barriers[1])){return false;} if ((whoseMove==2)&(i0)){return false;} NowBoard.sq_[i][j].side_=whoseMove; switch(turncounter){ case 46:{NowBoard.sq_[i][j].piece_=-1;break;} case 45:{NowBoard.sq_[i][j].piece_=9;break;} case 44:{NowBoard.sq_[i][j].piece_=5;break;} case 43:{NowBoard.sq_[i][j].piece_=5;break;} case 42:{NowBoard.sq_[i][j].piece_=4;break;} case 41:{NowBoard.sq_[i][j].piece_=4;break;} case 40:{NowBoard.sq_[i][j].piece_=3;break;} case 39:{NowBoard.sq_[i][j].piece_=3;break;} default:{NowBoard.sq_[i][j].piece_=1;break;} } DrawNowBoard(g); NextOrdinaryPlayer(g); return true; } } 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].DrawChessSquare(g, 312, choiss, false); return false; } NowBoard.sq_[i][j].DrawChessSquare(g, 312, 5/*2*/, false); for(x=1; x <=moveCounter; x++) MaybeMoves[x].endingsquare_.markexchsquncheckered(g, 12); markingAPiece=false; return true; } public boolean mouseDown(Event event, int i, int j) { if(NowBoard==null) return true; Graphics g=getGraphics(); ShowStatusNothing(); if(j < 30) if(humanizing) { return true; } else { DisplayRules(g); return true; } SayWhoIsHuman(g); if(GameOver) { GameOver=false; StartUp(g); repaint(); return true; } a=i / 30; b=13 - j / 30; if((i >=56) & (j >=396) & (i <=104) & (j <=414)) { humanizing=true; WhoIsHuman[1]=true; SayWhoIsHuman(g); } else if((i >=117) & (j >=396) & (i <=178) & (j <=414)) { humanizing=true; WhoIsHuman[1]=false; SayWhoIsHuman(g); } else if((i >=56) & (j >=416) & (i <=104) & (j <=434)) { humanizing=true; WhoIsHuman[2]=true; SayWhoIsHuman(g); } else if((i >=117) & (j >=416) & (i <=178) & (j <=434)) { humanizing=true; WhoIsHuman[2]=false; SayWhoIsHuman(g); } else if((i >=26) & (j > 436) & (i <=93) & (j <=454)) { if(who_is_winning==0) return true; humanizing=true; accepted_terms=true; SayWhoIsHuman(g); } else if((i >=147) & (j >=436) & (i < 242) & (j < 454)) { if(who_is_winning==0) return true; humanizing=true; accepted_terms=false; SayWhoIsHuman(g); } else if((i >=210) & (j >=405) & (i < 270) & (j < 425)) { 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((a < 1) | (a > 12) | (b < 1) | (b > 12)) return true; if(WhoIsHuman[whoseMove]) if((markingAPiece)|((choiss==1)&(turncounter<47))) markAPiece(g, b, a); else if(HumanMoveAPiece(g, b, a)) { if(GameOver) return true; NextOrdinaryPlayer(g); if(WhoIsHuman[whoseMove]) markingAPiece=true; } while((!WhoIsHuman[whoseMove]) & (!GameOver)) { MachineMoves(g, whoseMove); if(GameOver) return true; NextOrdinaryPlayer(g); if(WhoIsHuman[whoseMove]) markingAPiece=true; if(WhoIsHuman[whoseMove]) markingAPiece=true; } 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; } DrawNowBoard(g); g.setColor(niceblue); g.fillRect(0, 391, 300, 29);g.setColor(Color.black);g.setFont(f1);NameThisChessVariant(g); g.setColor(Color.black); g.setFont(f1); g.setColor(Color.black); SayWhoIsHuman(g); if((!markingAPiece) & (WhoIsHuman[whoseMove])) { NowBoard.sq_[mover_rank][mover_file].DrawChessSquare(g, 312, 2, false); for(x=1; x <=moveCounter; x++) MaybeMoves[x].endingsquare_.markexchsq(g, 12); } } public void stop() { NowBoard=null; MaybeBoard=null; OneBoard=null; TwoBoard=null; ThreeBoard=null; FourBoard=null; ArchiveBoard=null; MaybeMoves=null; Attackers=null; destroy(); } public void unalterMaybeBoard(Graphics g, Chsq chsq, Chsq chsq1, CB14_14 cb14_14, CB14_14 cb14_14_1) { cb14_14_1.sq_[chsq.rank_][chsq.file_].piece_=cb14_14.sq_[chsq.rank_][chsq.file_].piece_; cb14_14_1.sq_[chsq.rank_][chsq.file_].side_=cb14_14.sq_[chsq.rank_][chsq.file_].side_; cb14_14_1.sq_[chsq1.rank_][chsq1.file_].piece_=cb14_14.sq_[chsq1.rank_][chsq1.file_].piece_; cb14_14_1.sq_[chsq1.rank_][chsq1.file_].side_=cb14_14.sq_[chsq1.rank_][chsq1.file_].side_; } public boolean CanIPlaceASquare(int ranko, int fileo){ if (NowBoard.sq_[ranko][fileo].piece_!=74){return false;} if ((ranko+fileo)%2!=whoseMove%2){return false;} if ((NowBoard.sq_[ranko-1][fileo].piece_==0)&(ranko>1)){return true;} if ((NowBoard.sq_[ranko+1][fileo].piece_==0)&(ranko<12)){return true;} if ((NowBoard.sq_[ranko][fileo+1].piece_==0)&(fileo<12)){return true;} if ((NowBoard.sq_[ranko][fileo-1].piece_==0)&(fileo>1)){return true;} return false; } public void whatpiecescanmove(Graphics g) { if ((choiss==1)&(turncounter<31)) { for(ee=1; ee < 13; ee++) for(ff=1; ff < 13; ff++) { icanmove[ff][ee]=CanIPlaceASquare(ff,ee); } DrawNowBoard(g); return; } if ((choiss==1)&(turncounter<47)) { for(ee=1; ee < 13; ee++) for(ff=1; ff < 13; ff++) { icanmove[ff][ee]=false; if (NowBoard.sq_[ff][ee].piece_==0){icanmove[ff][ee]=true;} if ((whoseMove==1)&(ff>barriers[1])){icanmove[ff][ee]=false;} if ((whoseMove==2)&(ff0)){icanmove[ff][ee]=false;} } DrawNowBoard(g); return; } for(ee=1; ee < 13; ee++) for(ff=1; ff < 13; 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); } static String variant_name; int PawnCount[]; int KnightCount[]; int BishopCount[]; int RookCount[]; int QueenCount[]; int KingCount[]; static int forked_royalty; static int forked_rookage; static int forked_pieceage; static int fork_c; static int fork_d; static int undef_enemy_pawn_most_advanced_file[]=new int[3]; static int undef_enemy_pawn_most_advanced_rank[]=new int[3]; static int undef_enemy_pawn_nearest_king_file[]=new int[3]; static int undef_enemy_pawn_nearest_king_rank[]=new int[3]; static int distance_to_edible_pawn[]=new int[3]; static int pawnowner; static int strategos; 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; int KingRank[]; int KingFile[]; static int cee; static int dee; static int eee; static int xee; static int yee; static int assailant_rank; static int assailant_file; static int assailant2_rank; static int assailant2_file; static int turncounter;static int saved_turncounter;static int back_turncounter;static int saved_fifty_move_rule;static int back_fifty_move_rule; int Attackers[][][]; int StrongestAttacker[][][]; int WeakestAttacker[][][]; CB14_14 NowBoard; CB14_14 BackBoard; CB14_14 SaveBoard; boolean icanmove[][]; CB14_14 MaybeBoard; CB14_14 OneBoard; CB14_14 TwoBoard; CB14_14 ThreeBoard; CB14_14 FourBoard; CB14_14 ArchiveBoard[]; Chsq happySquare; Color niceblue; Chmo 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; 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 humanizing; static int mover_rank; static int mover_file; static int moveto_rank; static int moveto_file; static int how_far_am_i; 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 int myking_rank; static int myking_file; static int yourking_rank; static int yourking_file; static int x_bare; static int y_bare; static int my_nonking_piece_count; static int your_nonking_piece_count; static int my_other_piece_rank; static int my_other_piece_file; static boolean halt_if_king_taken; static int choiss; int barriers[]; 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; }