/** @see com.darlan.xadrez.Tabuleiro#getCasa(int, int) */ public Casa getCasa(int x, int y) { CasaGUI casaTemp; for (int i = 0; i < super.getComponentCount(); i++) { casaTemp = (CasaGUI) super.getComponent(i); if ((casaTemp.getPosicaoX() == x) && (casaTemp.getPosicaoY() == y)) { return casaTemp; } } return null; }
/** * Verifica se o rei preto sofreu cheque mate. * * @return <code>true</code> o rei preto sofreu cheque mate. */ public boolean isChequeMatePreto() { ReiPretoGUI reiPreto = null; CasaGUI casaDoReiTemp = null; CasaGUI casaDoRei = null; // Pega o rei branco no tabuleiro. for (int x = 0; x < 8; x++) for (int y = 0; y < 8; y++) { casaDoReiTemp = (CasaGUI) this.getCasa(x, y); if ((casaDoReiTemp.getPeca() instanceof ReiPretoGUI)) { casaDoRei = casaDoReiTemp; reiPreto = (ReiPretoGUI) casaDoRei.getPeca(); } } // verifica se o rei está sendo atacado if (casaDoRei.isAtaqueBranco()) { // se o rei não pode mover-se if (reiPreto.getCasasEmAtaque(this).size() == 0) { // Veririca se o cavalo adversário dá cheque mate. if (this.cavaloDaChequeMate(reiPreto)) { return true; } Vector pecasQueAtacam = this.pecasQueAtacamRei(reiPreto); // Verifica se mais de uma peça está atacando o rei. if (pecasQueAtacam.size() >= 2) { return true; } else { Peca peca = (Peca) pecasQueAtacam.get(0); CasaGUI casaTemp = (CasaGUI) this.getCasa(peca.getPosicaoX(), peca.getPosicaoY()); // verifica se a peça que está atacando o rei também está // sendo atacada. if (casaTemp.isAtaquePreto()) return false; // verifica se uma peça branca impede que a peça preta der // cheque mate. if (pecaPretaImpedeCheque((Peca) pecasQueAtacam.get(0), reiPreto)) { return false; } else { return true; } } // fim else } // fim do if(reiBranco.getCasasEmAtaque(this).size()==0) } return false; }
/** @see com.darlan.xadrez.gui.AbstractPecaGUI#setCasasEmAtaque(Tabuleiro) */ public void setCasasEmAtaque(Tabuleiro tabuleiro) { Casa casaTemp = tabuleiro.getCasa(x - 1, y + 1); if (casaTemp != null && casaTemp.temPeca()) ((CasaGUI) casaTemp).setAtaquePreto(true); casaTemp = tabuleiro.getCasa(x + 1, y + 1); if (casaTemp != null && casaTemp.temPeca()) ((CasaGUI) casaTemp).setAtaquePreto(true); }