Beispiel #1
0
  /**
   * 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;
  }