예제 #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;
  }
예제 #2
0
  /**
   * Verifica se uma peça preta impede o cheque mate no seu rei.
   *
   * @param pecaAdversaria
   * @param reiPreto
   * @return boolean
   */
  private boolean pecaPretaImpedeCheque(Peca pecaAdversaria, ReiPretoGUI reiPreto) {

    int xRei = reiPreto.getPosicaoX();
    int yRei = reiPreto.getPosicaoY();
    if (pecaAdversaria.getPosicaoX() < xRei && pecaAdversaria.getPosicaoY() < yRei) {
      xRei--;
      yRei--;
      while (pecaAdversaria.getPosicaoX() < xRei) {
        if (((CasaGUI) getCasa(xRei, yRei)).isAtaquePreto()) {
          return true;
        }
        xRei--;
        yRei--;
      }
    } else if ((pecaAdversaria.getPosicaoX() < xRei) && pecaAdversaria.getPosicaoY() == yRei) {
      xRei--;
      while (pecaAdversaria.getPosicaoX() < xRei) {
        if (((CasaGUI) getCasa(xRei, yRei)).isAtaquePreto()) {
          return true;
        }
        xRei--;
      }
    } else if ((pecaAdversaria.getPosicaoX() < xRei) && pecaAdversaria.getPosicaoY() > yRei) {
      xRei--;
      yRei++;
      while (pecaAdversaria.getPosicaoX() < xRei) {
        if (((CasaGUI) getCasa(xRei, yRei)).isAtaquePreto()) {
          return true;
        }
        xRei--;
        yRei++;
      }
    } else if ((pecaAdversaria.getPosicaoX() == xRei) && (pecaAdversaria.getPosicaoY() > yRei)) {
      yRei++;
      while (pecaAdversaria.getPosicaoY() > yRei) {
        if (((CasaGUI) getCasa(xRei, yRei)).isAtaquePreto()) {
          return true;
        }
        yRei++;
      }
    } else if ((pecaAdversaria.getPosicaoX() > xRei) && (pecaAdversaria.getPosicaoY() > yRei)) {
      xRei++;
      yRei++;
      while (pecaAdversaria.getPosicaoX() > xRei) {
        if (((CasaGUI) getCasa(xRei, yRei)).isAtaquePreto()) {
          return true;
        }
        xRei++;
        yRei++;
      }
    } else if ((pecaAdversaria.getPosicaoX() > xRei) && (pecaAdversaria.getPosicaoY() == yRei)) {
      xRei++;
      while (pecaAdversaria.getPosicaoX() > xRei) {
        if (((CasaGUI) getCasa(xRei, yRei)).isAtaquePreto()) {
          return true;
        }
        xRei++;
      }
    } else if ((pecaAdversaria.getPosicaoX() > xRei) && (pecaAdversaria.getPosicaoY() < yRei)) {
      xRei++;
      yRei--;
      while (pecaAdversaria.getPosicaoX() > xRei) {
        if (((CasaGUI) getCasa(xRei, yRei)).isAtaquePreto()) {
          return true;
        }
        xRei++;
        yRei--;
      }
    } else if ((pecaAdversaria.getPosicaoX() == xRei) && (pecaAdversaria.getPosicaoY() < yRei)) {
      yRei--;
      while (pecaAdversaria.getPosicaoY() < yRei) {
        if (((CasaGUI) getCasa(xRei, yRei)).isAtaquePreto()) {
          return true;
        }
        yRei--;
      }
    }
    return false;
  }