// 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: Cheapo.java import java.awt.*; import java.io.PrintStream; public class Cheapo extends EasyChss { public Cheapo() { } public boolean SomeInitialConditionForKeydown() { System.out.println("Backup keys have been disabled"); return true; } public boolean PassedOtherRequirementsToKeep(Chsq chsq, CB10_10 cb10_10, CB10_10 cb10_10_1) { return NowBoard.sq_[d[depth]][c[depth]].piece_ >= 0; } public void AssignVariantName() { halt_if_king_taken = false; variant_name = "Cheapo"; } public void DidICheckOrStalemate(Graphics g, int i) { if(GameOver) return; moveCounter = 0; CheapoMoveCounter = 0; SeekAllCheapos = true; 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); SeekAllCheapos = false; if(IsMySideInCheck(3 - i)) { if((moveCounter == 0) & (CheapoMoveCounter == 0)) { ShowStatusQ("Checkmate!"); GameOver = true; wins[i] = wins[i] + 1; return; } if(moveCounter == 0) { ShowStatusQ("Check! Use your cheapo move!"); return; } else { ShowStatusQ("Check!"); return; } } if(moveCounter == 0) { if(CheapoMoveCounter > 0) { ShowStatusQ("Use your cheapo move!"); return; } else { ShowStatusQ("Stalemate!"); GameOver = true; drawn_games++; return; } } else { return; } } public void DisplayRules(Graphics g) { LowRectangle(g); g.drawString("Once in the game, you can move a unit twice.", 5, 285); g.drawString("No checking or promoting on the first half ", 5, 301); g.drawString("of a cheapo move.", 5, 317); } public void EpiscopalCheapo(Graphics g, Chsq chsq) { if(CheapoUsed[chsq.side_]) return; if(!SeekAllCheapos) return; c_cheapo = c[depth] - 1; for(d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth]); d_cheapo--) c_cheapo--; c_cheapo = c[depth] + 1; for(d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth]); d_cheapo--) c_cheapo++; c_cheapo = c[depth] - 1; for(d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth]); d_cheapo++) c_cheapo--; c_cheapo = c[depth] + 1; for(d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth]); d_cheapo++) c_cheapo++; } public void KinglyCheapo(Graphics g, Chsq chsq) { if(CheapoUsed[chsq.side_]) return; if(!SeekAllCheapos) { return; } else { c_cheapo = c[depth] + 1; d_cheapo = d[depth]; MaybeAddCheapo(g, chsq); c_cheapo = c[depth]; d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq); c_cheapo = c[depth] - 1; d_cheapo = d[depth]; MaybeAddCheapo(g, chsq); c_cheapo = c[depth]; d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq); c_cheapo = c[depth] + 1; d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq); c_cheapo = c[depth] + 1; d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq); c_cheapo = c[depth] - 1; d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq); c_cheapo = c[depth] - 1; d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq); return; } } public void KnightlyCheapo(Graphics g, Chsq chsq) { if(CheapoUsed[chsq.side_]) return; if(!SeekAllCheapos) { return; } else { c_cheapo = c[depth] + 1; d_cheapo = d[depth] + 2; MaybeAddCheapo(g, chsq); c_cheapo = c[depth] + 1; d_cheapo = d[depth] - 2; MaybeAddCheapo(g, chsq); c_cheapo = c[depth] - 1; d_cheapo = d[depth] + 2; MaybeAddCheapo(g, chsq); c_cheapo = c[depth] - 1; d_cheapo = d[depth] - 2; MaybeAddCheapo(g, chsq); c_cheapo = c[depth] + 2; d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq); c_cheapo = c[depth] + 2; d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq); c_cheapo = c[depth] - 2; d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq); c_cheapo = c[depth] - 2; d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq); return; } } 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; CheapoMoveCounter = 0; SeekAllCheapos = true; 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; SeekAllCheapos = false; ShowStatusNothing(); if(moveCounter == 0) if(CheapoMoveCounter > 0) { x = 1 + (int)Math.floor(Math.random() * (double)CheapoMoveCounter); ShowStatusQ("CHEAPO! " + x); CheapoUsed[whoseMove] = true; moveto_file = MaybeCheapoMoves[x].endingsquare_.file_; moveto_rank = MaybeCheapoMoves[x].endingsquare_.rank_; mover_file = MaybeCheapoMoves[x].startingsquare_.file_; mover_rank = MaybeCheapoMoves[x].startingsquare_.rank_; 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_; NowBoard.sq_[mover_rank][mover_file].side_ = 0; NowBoard.sq_[mover_rank][mover_file].piece_ = 0; 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); return GameOver ? true : true; } else { ShowStatusQ("No Moves " + CheapoMoveCounter); 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].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, 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(cb10_10.sq_[d[depth]][c[depth]].side_ == chsq.side_) return false; alterMaybeBoard(g, chsq, cb10_10.sq_[d[depth]][c[depth]], cb10_10, cb10_10_1); worried = AmIWorried(chsq.side_); if(IsMySideInCheck(3 - chsq.side_) & (CheapoStage[chsq.side_] == 1)) { TotalMaybeBoard(NowBoard, MaybeBoard); 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 false; } if((chsq.piece_ == 1) & ((chsq.rank_ == 7) & (chsq.side_ == 1) | (chsq.rank_ == 2) & (chsq.side_ == 2)) & (CheapoStage[chsq.side_] == 1)) { TotalMaybeBoard(NowBoard, MaybeBoard); return false; } if(IsMySideInCheck(chsq.side_) & (CheapoStage[chsq.side_] != 1)) { 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 false; } good_move = 1; if(IsMySideInCheck(3 - chsq.side_)) good_move += 5; if((chsq.piece_ == 1) | (chsq.piece_ == 2) | (chsq.piece_ < 0)) { if((cb10_10.sq_[d[depth]][c[depth]].piece_ == 3) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 4)) good_move += 15; if((cb10_10.sq_[d[depth]][c[depth]].piece_ == 5) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 6)) good_move += 25; if(cb10_10.sq_[d[depth]][c[depth]].piece_ == 9) good_move += 50; } if((chsq.piece_ == 3) | (chsq.piece_ == 4)) { if((cb10_10.sq_[d[depth]][c[depth]].piece_ == 5) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 6)) good_move += 15; if(cb10_10.sq_[d[depth]][c[depth]].piece_ == 9) good_move += 25; } if((chsq.piece_ == 5) | (chsq.piece_ == 6) && cb10_10.sq_[d[depth]][c[depth]].piece_ == 9) good_move += 20; if(chsq.piece_ == 9 && (Attackers[chsq.rank_][chsq.file_][3 - chsq.side_] > 0) & (!AmIUnderAttack(d[depth], c[depth], whoseMove))) good_move += 20; if((cb10_10.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; good_counter = 1; if(moveCounter > 500) good_move = 1; for(; good_counter <= good_move; good_counter++) { moveCounter++; if((halt_if_king_taken) & (!skipDtGM) & (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]]; } if((!AmIUnderAttack(d[depth], c[depth], whoseMove)) & (cb10_10.sq_[d[depth]][c[depth]].piece_ == 9) && Math.random() * 100D < 98D) AssignGoodMove9(); if((chsq.piece_ == 1) & (!AmIUnderAttack(d[depth], c[depth], whoseMove))) { if((chsq.side_ == 1) & (d[depth] == 8) && !worried) AssignGoodMove9(); if((chsq.side_ == 2) & (d[depth] == 1) && !worried) AssignGoodMove9(); } if((chsq.piece_ != 9) & (cb10_10.sq_[d[depth]][c[depth]].piece_ == 9) && (Math.random() * 100D < 98D && !worried)) AssignGoodMove9(); if((chsq.piece_ == 9) & (Attackers[chsq.rank_][chsq.file_][3 - chsq.side_] > 0) & (!AmIUnderAttack(d[depth], c[depth], whoseMove)) && (Math.random() * 100D < 98D && !worried)) { AssignGoodMove8(); if(NowBoard.sq_[d[depth]][c[depth]].piece_ != 0) AssignGoodMove9(); } if((!AmIUnderAttack(d[depth], c[depth], whoseMove)) & ((cb10_10.sq_[d[depth]][c[depth]].piece_ == 5) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 6)) && (Math.random() * 100D < 98D && !worried)) AssignGoodMove7(); if((chsq.piece_ < 5) & ((cb10_10.sq_[d[depth]][c[depth]].piece_ == 5) | (cb10_10.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)) && (Math.random() * 100D < 98D && !worried)) { AssignGoodMove8(); if(NowBoard.sq_[d[depth]][c[depth]].piece_ != 0) AssignGoodMove9(); } if((!AmIUnderAttack(d[depth], c[depth], whoseMove)) & ((cb10_10.sq_[d[depth]][c[depth]].piece_ == 3) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 4)) && (Math.random() * 100D < 79D && !worried)) AssignGoodMove4(); if((chsq.piece_ < 3) & ((cb10_10.sq_[d[depth]][c[depth]].piece_ == 3) | (cb10_10.sq_[d[depth]][c[depth]].piece_ == 4)) && (Math.random() * 100D < 76D && !worried)) AssignGoodMove3(); if((!AmIUnderAttack(d[depth], c[depth], whoseMove)) & 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: // '\005' AssignGoodMove9(); break; case 4: // '\004' AssignGoodMove7(); break; case 3: // '\003' AssignGoodMove5(); break; case 2: // '\002' AssignGoodMove3(); break; case 1: // '\001' AssignGoodMove2(); break; } if((StrongestAttacker[chsq.rank_][chsq.file_][3 - chsq.side_] > 0) & (StrongestAttacker[chsq.rank_][chsq.file_][3 - chsq.side_] < chsq.strength()) & (StrongestAttacker[d[depth]][c[depth]][3 - chsq.side_] == 0) & (Math.random() * 100D < 98D)) switch(chsq.strength()) { case 5: // '\005' AssignGoodMove9(); break; case 4: // '\004' AssignGoodMove7(); break; case 3: // '\003' AssignGoodMove5(); break; case 2: // '\002' AssignGoodMove3(); break; case 1: // '\001' AssignGoodMove2(); break; } if((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: // '\005' AssignGoodMove9(); break; case 4: // '\004' AssignGoodMove7(); break; case 3: // '\003' AssignGoodMove5(); break; case 2: // '\002' AssignGoodMove3(); break; case 1: // '\001' 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_]) & (cb10_10.sq_[d[depth]][c[depth]].piece_ != 0) && (Math.random() * 100D < 71D && !worried)) AssignGoodMove1(); if((fifty_move_rule > 4) & chsq.pawn() & (Math.random() * 100D < (double)(100 - 10 * PawnCount[chsq.side_])) & (!worried) & (!AmIUnderAttack(d[depth], c[depth], whoseMove))) AssignGoodMove1(); 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 MaybeAddCheapo(Graphics g, Chsq chsq) { CheckSquare[depth] = false; SquatterOnCheckSquare[depth] = false; if((c_cheapo < 1) | (c_cheapo > 8) | (d_cheapo < 1) | (d_cheapo > 8)) return false; if(NowBoard.sq_[d_cheapo][c_cheapo].side_ == chsq.side_) return false; alterMaybeBoard(g, chsq, NowBoard.sq_[d_cheapo][c_cheapo], NowBoard, MaybeBoard); if(IsMySideInCheck(3 - chsq.side_) & (CheapoStage[chsq.side_] == 1)) { unalterMaybeBoard(g, chsq, NowBoard.sq_[d_cheapo][c_cheapo], NowBoard, MaybeBoard); CheckSquare[depth] = true; if(NowBoard.sq_[d_cheapo][c_cheapo].piece_ != 0) SquatterOnCheckSquare[depth] = true; return false; } if(IsMySideInCheck(chsq.side_)) { unalterMaybeBoard(g, chsq, NowBoard.sq_[d_cheapo][c_cheapo], NowBoard, MaybeBoard); CheckSquare[depth] = true; if(NowBoard.sq_[d_cheapo][c_cheapo].piece_ != 0) SquatterOnCheckSquare[depth] = true; return false; } CheapoMoveCounter++; if((halt_if_king_taken) & (!skipDtGM) & (depth < 2) & (NowBoard.sq_[d_cheapo][c_cheapo].piece_ < 0)) { goodmove10 = moveCounter; System.out.print("King captured"); WhoIsHuman[1] = true; WhoIsHuman[2] = true; } MaybeCheapoMoves[CheapoMoveCounter].startingsquare_ = chsq; MaybeCheapoMoves[CheapoMoveCounter].endingsquare_ = NowBoard.sq_[d_cheapo][c_cheapo]; unalterMaybeBoard(g, chsq, NowBoard.sq_[d_cheapo][c_cheapo], NowBoard, MaybeBoard); return NowBoard.sq_[d_cheapo][c_cheapo].side_ == 0; } public void NullifySomethingElse() { MaybeCheapoMoves = null; } public void PawnCheapo(Graphics g, Chsq chsq) { if(CheapoUsed[chsq.side_]) return; if(!SeekAllCheapos) return; if((chsq.side_ == 1) & (d[depth] < 8)) { if(NowBoard.sq_[d[depth] + 1][c[depth]].piece_ == 0) { c_cheapo = c[depth]; d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq); } if((d[depth] == 2) & (NowBoard.sq_[3][c[depth]].piece_ == 0) & (NowBoard.sq_[4][c[depth]].piece_ == 0)) { c_cheapo = c[depth]; d_cheapo = 4; MaybeAddCheapo(g, chsq); } if(c[depth] > 1) { if((NowBoard.sq_[d[depth] + 1][c[depth] - 1].side_ != 0) & (NowBoard.sq_[d[depth] + 1][c[depth] - 1].side_ != chsq.side_) & (NowBoard.sq_[d[depth] + 1][c[depth] - 1].piece_ != 0)) { c_cheapo = c[depth] - 1; d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq); } if((NowBoard.sq_[d[depth] + 1][c[depth] - 1].side_ == 0) & (NowBoard.sq_[d[depth]][c[depth] - 1].side_ != chsq.side_) & (NowBoard.sq_[d[depth]][c[depth] - 1].piece_ == 2)) { c_cheapo = c[depth] - 1; d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq); } } if(c[depth] < 8) { if((NowBoard.sq_[d[depth] + 1][c[depth] + 1].side_ != 0) & (NowBoard.sq_[d[depth] + 1][c[depth] + 1].side_ != chsq.side_) & (NowBoard.sq_[d[depth] + 1][c[depth] + 1].piece_ != 0)) { c_cheapo = c[depth] + 1; d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq); } if((NowBoard.sq_[d[depth] + 1][c[depth] + 1].side_ == 0) & (NowBoard.sq_[d[depth]][c[depth] + 1].side_ != chsq.side_) & (NowBoard.sq_[d[depth]][c[depth] + 1].piece_ == 2)) { c_cheapo = c[depth] + 1; d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq); } } } if((chsq.side_ == 2) & (d[depth] > 1)) { if(NowBoard.sq_[d[depth] - 1][c[depth]].piece_ == 0) { c_cheapo = c[depth]; d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq); } if((d[depth] == 7) & (NowBoard.sq_[6][c[depth]].piece_ == 0) & (NowBoard.sq_[5][c[depth]].piece_ == 0)) { c_cheapo = c[depth]; d_cheapo = 5; MaybeAddCheapo(g, chsq); } if(c[depth] > 1) { if((NowBoard.sq_[d[depth] - 1][c[depth] - 1].side_ != 0) & (NowBoard.sq_[d[depth] - 1][c[depth] - 1].side_ != chsq.side_) & (NowBoard.sq_[d[depth] - 1][c[depth] - 1].piece_ != 0)) { c_cheapo = c[depth] - 1; d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq); } if((NowBoard.sq_[d[depth] - 1][c[depth] - 1].side_ == 0) & (NowBoard.sq_[d[depth]][c[depth] - 1].side_ != chsq.side_) & (NowBoard.sq_[d[depth]][c[depth] - 1].piece_ == 2)) { c_cheapo = c[depth] - 1; d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq); } } if(c[depth] < 8) { if((NowBoard.sq_[d[depth] - 1][c[depth] + 1].side_ != 0) & (NowBoard.sq_[d[depth] - 1][c[depth] + 1].side_ != chsq.side_) & (NowBoard.sq_[d[depth] - 1][c[depth] + 1].piece_ != 0)) { c_cheapo = c[depth] + 1; d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq); } if((NowBoard.sq_[d[depth] - 1][c[depth] + 1].side_ == 0) & (NowBoard.sq_[d[depth]][c[depth] + 1].side_ != chsq.side_) & (NowBoard.sq_[d[depth]][c[depth] + 1].piece_ == 2)) { c_cheapo = c[depth] + 1; d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq); } } } } public void RookishCheapo(Graphics g, Chsq chsq) { if(CheapoUsed[chsq.side_]) return; if(!SeekAllCheapos) return; c_cheapo = c[depth] - 1; d_cheapo = d[depth]; while(MaybeAddCheapo(g, chsq) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth])) c_cheapo--; c_cheapo = c[depth] + 1; d_cheapo = d[depth]; while(MaybeAddCheapo(g, chsq) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth])) c_cheapo++; c_cheapo = c[depth]; for(d_cheapo = d[depth] - 1; MaybeAddCheapo(g, chsq) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth]); d_cheapo--); c_cheapo = c[depth]; for(d_cheapo = d[depth] + 1; MaybeAddCheapo(g, chsq) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth]); d_cheapo++); } public void SayWhoIsHuman(Graphics g) { if(PromotingAPawn) return; g.setColor(niceblue); g.fillRect(0, 271, 300, 94); g.setColor(Color.black); if((!humanizing) & OfferCheapo) { g.setFont(f2); g.drawString("CHEAPO?", 210, 300); } 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.drawString("Cheapo Chess", 5, 15); g.drawString("About:", 240, 15); 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 StartUp(Graphics g) { turncounter = 1; saved_fifty_move_rule = 0; saved_turncounter = 1; ShowStatusNothing(); accepted_terms = false; who_is_winning = 0; humanizing = false; OfferCheapo = true; CheapoUsed[1] = false; CheapoUsed[2] = false; CheapoStage[1] = 0; CheapoStage[2] = 0; 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_ = 6; NowBoard.sq_[1][8].side_ = 1; NowBoard.sq_[1][8].piece_ = 6; NowBoard.sq_[8][1].side_ = 2; NowBoard.sq_[8][1].piece_ = 6; NowBoard.sq_[8][8].side_ = 2; NowBoard.sq_[8][8].piece_ = 6; 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_ = -2; NowBoard.sq_[8][5].side_ = 2; NowBoard.sq_[8][5].piece_ = -2; 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; } TotalMaybeBoard(NowBoard, MaybeBoard); TotalMaybeBoard(MaybeBoard, TwoBoard); TotalMaybeBoard(TwoBoard, ThreeBoard); TotalMaybeBoard(ThreeBoard, FourBoard); whoseMove = 1; whatpiecescanmove(g); PromotingAPawn = false; GameOver = false; fifty_move_rule = 0; TotalSaveBoard(); TotalBackBoard(); } public boolean findPieceMoves(Graphics g, Chsq chsq, CB10_10 cb10_10, CB10_10 cb10_10_1) { CheckSquare[depth] = false; SquatterOnCheckSquare[depth] = false; if((chsq.piece_ == 9) | (chsq.piece_ == 5) | (chsq.piece_ == 6)) { c[depth] = chsq.file_ - 1; d[depth] = chsq.rank_; RookishCheapo(g, chsq); while(MaybeAdd(g, chsq, cb10_10, cb10_10_1) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth])) { c[depth] = c[depth] - 1; if(MaybeAdd(g, chsq, cb10_10, cb10_10_1)) RookishCheapo(g, chsq); } } if((chsq.piece_ == 9) | (chsq.piece_ == 5) | (chsq.piece_ == 6)) { c[depth] = chsq.file_ + 1; d[depth] = chsq.rank_; RookishCheapo(g, chsq); while(MaybeAdd(g, chsq, cb10_10, cb10_10_1) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth])) { c[depth]++; if(MaybeAdd(g, chsq, cb10_10, cb10_10_1)) RookishCheapo(g, chsq); } } if((chsq.piece_ == 9) | (chsq.piece_ == 5) | (chsq.piece_ == 6)) { c[depth] = chsq.file_; d[depth] = chsq.rank_ - 1; RookishCheapo(g, chsq); while(MaybeAdd(g, chsq, cb10_10, cb10_10_1) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth])) { d[depth] = d[depth] - 1; if(MaybeAdd(g, chsq, cb10_10, cb10_10_1)) RookishCheapo(g, chsq); } } if((chsq.piece_ == 9) | (chsq.piece_ == 5) | (chsq.piece_ == 6)) { c[depth] = chsq.file_; d[depth] = chsq.rank_ + 1; RookishCheapo(g, chsq); while(MaybeAdd(g, chsq, cb10_10, cb10_10_1) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth])) { d[depth]++; if(MaybeAdd(g, chsq, cb10_10, cb10_10_1)) RookishCheapo(g, chsq); } } if((chsq.piece_ == 9) | (chsq.piece_ == 4)) { c[depth] = chsq.file_ - 1; d[depth] = chsq.rank_ - 1; EpiscopalCheapo(g, chsq); while(MaybeAdd(g, chsq, cb10_10, cb10_10_1) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth])) { c[depth] = c[depth] - 1; d[depth] = d[depth] - 1; if(MaybeAdd(g, chsq, cb10_10, cb10_10_1)) EpiscopalCheapo(g, chsq); } } if((chsq.piece_ == 9) | (chsq.piece_ == 4)) { c[depth] = chsq.file_ - 1; d[depth] = chsq.rank_ + 1; EpiscopalCheapo(g, chsq); while(MaybeAdd(g, chsq, cb10_10, cb10_10_1) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth])) { c[depth] = c[depth] - 1; d[depth] = d[depth] + 1; if(MaybeAdd(g, chsq, cb10_10, cb10_10_1)) EpiscopalCheapo(g, chsq); } } if((chsq.piece_ == 9) | (chsq.piece_ == 4)) { c[depth] = chsq.file_ + 1; d[depth] = chsq.rank_ - 1; EpiscopalCheapo(g, chsq); while(MaybeAdd(g, chsq, cb10_10, cb10_10_1) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth])) { c[depth] = c[depth] + 1; d[depth] = d[depth] - 1; if(MaybeAdd(g, chsq, cb10_10, cb10_10_1)) EpiscopalCheapo(g, chsq); } } if((chsq.piece_ == 9) | (chsq.piece_ == 4)) { c[depth] = chsq.file_ + 1; d[depth] = chsq.rank_ + 1; EpiscopalCheapo(g, chsq); while(MaybeAdd(g, chsq, cb10_10, cb10_10_1) | CheckSquare[depth] & (!SquatterOnCheckSquare[depth])) { c[depth] = c[depth] + 1; d[depth] = d[depth] + 1; if(MaybeAdd(g, chsq, cb10_10, cb10_10_1)) EpiscopalCheapo(g, chsq); } } if((chsq.piece_ == -1) | (chsq.piece_ == -2)) { c[depth] = chsq.file_ + 1; d[depth] = chsq.rank_; KinglyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if((chsq.piece_ == -1) | (chsq.piece_ == -2)) { c[depth] = chsq.file_; d[depth] = chsq.rank_ + 1; KinglyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if((chsq.piece_ == -1) | (chsq.piece_ == -2)) { c[depth] = chsq.file_ - 1; d[depth] = chsq.rank_; KinglyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if((chsq.piece_ == -1) | (chsq.piece_ == -2)) { c[depth] = chsq.file_; d[depth] = chsq.rank_ - 1; KinglyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if((chsq.piece_ == -1) | (chsq.piece_ == -2)) { c[depth] = chsq.file_ + 1; d[depth] = chsq.rank_ + 1; KinglyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if((chsq.piece_ == -1) | (chsq.piece_ == -2)) { c[depth] = chsq.file_ + 1; d[depth] = chsq.rank_ - 1; KinglyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if((chsq.piece_ == -1) | (chsq.piece_ == -2)) { c[depth] = chsq.file_ - 1; d[depth] = chsq.rank_ + 1; KinglyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if((chsq.piece_ == -1) | (chsq.piece_ == -2)) { c[depth] = chsq.file_ - 1; d[depth] = chsq.rank_ - 1; KinglyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if(chsq.piece_ == 3) { c[depth] = chsq.file_ - 2; d[depth] = chsq.rank_ - 1; KnightlyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if(chsq.piece_ == 3) { c[depth] = chsq.file_ - 2; d[depth] = chsq.rank_ + 1; KnightlyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if(chsq.piece_ == 3) { c[depth] = chsq.file_ + 2; d[depth] = chsq.rank_ - 1; KnightlyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if(chsq.piece_ == 3) { c[depth] = chsq.file_ + 2; d[depth] = chsq.rank_ + 1; KnightlyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if(chsq.piece_ == 3) { c[depth] = chsq.file_ - 1; d[depth] = chsq.rank_ - 2; KnightlyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if(chsq.piece_ == 3) { c[depth] = chsq.file_ - 1; d[depth] = chsq.rank_ + 2; KnightlyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if(chsq.piece_ == 3) { c[depth] = chsq.file_ + 1; d[depth] = chsq.rank_ - 2; KnightlyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if(chsq.piece_ == 3) { c[depth] = chsq.file_ + 1; d[depth] = chsq.rank_ + 2; KnightlyCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if((chsq.piece_ == 1) | (chsq.piece_ == 2)) { if((chsq.side_ == 1) & (chsq.rank_ < 8)) { if(NowBoard.sq_[chsq.rank_ + 1][chsq.file_].piece_ == 0) { c[depth] = chsq.file_; d[depth] = chsq.rank_ + 1; PawnCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if((chsq.rank_ == 2) & (NowBoard.sq_[3][chsq.file_].piece_ == 0) & (NowBoard.sq_[4][chsq.file_].piece_ == 0)) { c[depth] = chsq.file_; d[depth] = 4; PawnCheapo(g, chsq); MaybeAdd(g, chsq, 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; PawnCheapo(g, chsq); MaybeAdd(g, chsq, 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)) { c[depth] = chsq.file_ - 1; d[depth] = chsq.rank_ + 1; PawnCheapo(g, chsq); MaybeAdd(g, chsq, 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; PawnCheapo(g, chsq); MaybeAdd(g, chsq, 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)) { c[depth] = chsq.file_ + 1; d[depth] = chsq.rank_ + 1; PawnCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_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; PawnCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } if((chsq.rank_ == 7) & (NowBoard.sq_[6][chsq.file_].piece_ == 0) & (NowBoard.sq_[5][chsq.file_].piece_ == 0)) { c[depth] = chsq.file_; d[depth] = 5; PawnCheapo(g, chsq); MaybeAdd(g, chsq, 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; PawnCheapo(g, chsq); MaybeAdd(g, chsq, 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)) { c[depth] = chsq.file_ - 1; d[depth] = chsq.rank_ - 1; PawnCheapo(g, chsq); MaybeAdd(g, chsq, 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; PawnCheapo(g, chsq); MaybeAdd(g, chsq, 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)) { c[depth] = chsq.file_ + 1; d[depth] = chsq.rank_ - 1; PawnCheapo(g, chsq); MaybeAdd(g, chsq, cb10_10, cb10_10_1); } } } } if(chsq.piece_ == -2) { MaybeCastleKingside(g, chsq.side_); MaybeCastleQueenside(g, chsq.side_); } return true; } public void SupplementalInit() { CheapoStage = new int[3]; MaybeCheapoMoves = new Chmo[1001]; for(a = 1; a <= 1000; a++) MaybeCheapoMoves[a] = new Chmo(); CheapoUsed = new boolean[5]; WhoIsHuman[1] = true; WhoIsHuman[2] = false; SeekAllCheapos = false; GameOver = false; PromotingAPawn = false; drawn_games = 0; getGraphics(); setBackground(niceblue); markingAPiece = true; } public boolean markAPiece(Graphics g, int i, int j) { if(NowBoard.sq_[i][j].side_ != whoseMove) return false; moveCounter = 0; CheapoMoveCounter = 0; c[depth] = j; d[depth] = i; mover_rank = i; mover_file = j; moveCounter = 0; CheapoMoveCounter = 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; } if(OfferCheapo) { OfferCheapo = false; SayWhoIsHuman(g); } 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(); ShowStatusNothing(); if(j < 30) if(humanizing | PromotingAPawn) { return true; } else { DisplayRules(g); return true; } if(!PromotingAPawn) SayWhoIsHuman(g); if(PromotingAPawn) DrawPromotionOptions(g); if(GameOver) { GameOver = false; StartUp(g); repaint(); return true; } a = i / 30; b = 9 - j / 30; if((i >= 210) & (j >= 285) & (!humanizing) & OfferCheapo & (j < 305)) { CheapoStage[whoseMove] = 1; OfferCheapo = false; SayWhoIsHuman(g); whatpiecescanmove(g); CheapoUsed[whoseMove] = true; return true; } 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(j < 300) return true; if(j > 330) return true; if(i < 90) return true; if(i > 210) return true; if(i < 120) xxx = 9; else if(i < 150) xxx = 5; else if(i < 180) xxx = 4; else xxx = 3; NowBoard.sq_[queening_rank][queening_file].piece_ = xxx; MaybeBoard.sq_[queening_rank][queening_file].piece_ = xxx; NowBoard.sq_[queening_rank][queening_file].drawchsq(g, 1, false); TotalMaybeBoard(NowBoard, MaybeBoard); DidICheckOrStalemate(g, whoseMove); PromotingAPawn = false; SayWhoIsHuman(g); if(CheapoStage[whoseMove] == 1) { CheapoStage[whoseMove] = 2; return true; } CheapoStage[whoseMove] = 0; NextOrdinaryPlayer(g); GenerateAttackersArrays(); 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; if(CheapoStage[whoseMove] == 1) { CheapoStage[whoseMove] = 2; return true; } CheapoStage[whoseMove] = 0; NextOrdinaryPlayer(g); GenerateAttackersArrays(); if(WhoIsHuman[whoseMove]) markingAPiece = true; } while((!WhoIsHuman[whoseMove]) & (!GameOver) & (!PromotingAPawn)) { MachineMoves(g, whoseMove); if(GameOver) return true; if(CheapoStage[whoseMove] == 1) { CheapoStage[whoseMove] = 2; } else { CheapoStage[whoseMove] = 0; NextOrdinaryPlayer(g); GenerateAttackersArrays(); if(WhoIsHuman[whoseMove]) markingAPiece = true; } UnTwoThePawns(whoseMove); } if((!CheapoUsed[whoseMove]) & markingAPiece) { OfferCheapo = true; SayWhoIsHuman(g); } return true; } public boolean opening_library() { return false; } public void whatpiecescanmove(Graphics g) { for(ee = 1; ee < 9; ee++) for(ff = 1; ff < 9; ff++) { icanmove[ff][ee] = false; moveCounter = 0; CheapoMoveCounter = 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; SeekAllCheapos = true; findPieceMoves(g, NowBoard.sq_[ff][ee], NowBoard, MaybeBoard); skipDtGM = false; SeekAllCheapos = false; if(CheapoStage[whoseMove] != 1 && moveCounter > 0) icanmove[ff][ee] = true; if(CheapoStage[whoseMove] == 1 && CheapoMoveCounter > 0) icanmove[ff][ee] = true; } } DrawNowBoard(g); } static boolean OfferCheapo; static boolean SeekAllCheapos; static int c_cheapo; static int d_cheapo; static int CheapoMoveCounter; int CheapoStage[]; Chmo MaybeCheapoMoves[]; boolean CheapoUsed[]; }