Exemplo n.º 1
0
  /**
   * Verifică daca mutarea este ilegală. Dacă este ilegală, întoarce motivul. Dacă întoarce <code>
   * "legal"</code>. înseamnă mutarea este legală.
   *
   * @param mutare mutarea care trebuie analizată
   * @param i indicele jucătorului
   * @return motivul pentru care mutarea este ilegală, sau <code>"legal"</code> dacă-i legală
   */
  protected String esteMutareIlegala(Mutare mutare, int i) {
    String motiv = mutare.verificareLegalitate(tipJoc);
    if (!motiv.equals("legal")) return motiv;

    int deLuat = numarDeLuat();
    if (deLuat == 0) {
      if (mutare.numarDeCarti > 1)
        return "Nu ai voie să iei mai mult de o carte dacă nu ai fost pedepsit!";
    } else {
      boolean raspunde = false;
      if (mutare.cartiDePus != null) {
        if (mutare.cartiDePus[0].getNumar() <= 3) raspunde = true; // este jocher, 2 sau 3
        if (tipJoc.cuStopare && mutare.cartiDePus[0].getNumar() == tipJoc.carteaDeStopare)
          raspunde = true;
      }
      if (deLuat == mutare.numarDeCarti) raspunde = true;
      if (mutare.staTura) raspunde = true;
      if (!raspunde)
        return "Ai fost pedepsit și în loc să dai mai departe sau să iei ai făcut altceva!";
    }

    int deStat = tureDeStat();
    if (deStat > 0) {
      boolean raspunde = false;
      if (mutare.cartiDePus != null && mutare.cartiDePus[0].getNumar() == tipJoc.carteaDeStatTura)
        raspunde = true;
      if (mutare.staTura) {
        raspunde = true;
        // dacă el deja stă trebuie să pice următorului
        if (tureDeStat.get(i) == 0) {
          tureDeStat.set(i, deStat);
          adaugaCaPrimaTura(mutari.size());
        }
      }
      if (!raspunde) return "Trebuie să stai tura, dar n-ai dat mai departe și nici n-ai stat!";
    }

    if (mutare.staTura) {
      if (tureDeStat.get(i) == 0) return "Ai stat tura fără motiv!";
    } else {
      if (tureDeStat.get(i) > 0) {
        System.out.println(tureDeStat.get(i));
        return "Trebuie să stai tura și n-ai stat";
      }
    }
    if (tureDeStat.get(i) > 0) tureDeStat.set(i, tureDeStat.get(i) - 1);

    // dacă nu este o carte specială trebuie să se potrivească peste celelalte cărți.

    // trebuie verificat dacă chiar are cărțile pe care vrea să le pună
    if (!contineCartile(mutare.cartiDePus, cartiJucatori.get(i)))
      return "Nu ai cărțile pe care vrei să le pui jos!";

    mutari.add(mutare);
    return "legal";
  }
Exemplo n.º 2
0
  public void incepeJocul() {
    // adaugă cărțile în joc
    teanc = new Vector<Carte>();
    for (int i = 2; i <= 14; i++) {
      teanc.add(new Carte("I" + i));
      teanc.add(new Carte("R" + i));
      teanc.add(new Carte("F" + i));
      teanc.add(new Carte("T" + i));
    }
    if (tipJoc.cuJocheri) {
      teanc.add(new Carte("J0"));
      teanc.add(new Carte("J1"));
    }

    amestecareTeanc();

    // împarte cărțile
    cartiJucatori = new Vector<Vector<Carte>>();
    for (int i = 0; i < Array.getLength(jucatori); i++) {
      cartiJucatori.add(new Vector<Carte>());
      for (int j = 0; j < 5; j++) {
        Carte scoasa = teanc.remove(0);
        cartiJucatori.get(i).add(scoasa);
      }
    }

    // pune cartea jos
    cartiPuse = new Vector<Carte>();
    cartiPuse.add(teanc.remove(0));

    // prima carte trebuie adaugată ca o mutare, problema este dacă este cartea de schimbat
    // ??????????????????????///////////////////////////////////
    Mutare m = new Mutare();
    m.cartiDePus = new Carte[1];
    m.cartiDePus[0] = cartiPuse.get(0);
    mutari.add(m);

    // trimite-le cărțile
    for (int i = 0; i < Array.getLength(jucatori); i++)
      jucatori[i].start(
          tipJoc, jucatori, Carte.vectorToArray(cartiJucatori.get(i)), cartiPuse.get(0));

    // marea buclă
    while (jucatoriPrezenti.size() > 1) {
      for (int i = 0; i < jucatoriPrezenti.size(); i++) {
        Mutare mutare = jucatoriPrezenti.get(i).muta();
        //////////////////////////////////////////////////////////////////////////
        System.out.printf(
            "%s[are %s]: %s\n",
            jucatoriPrezenti.get(i).getNume(),
            Carte.arataCarti(cartiJucatori.get(i)),
            mutare.notatie());
        //////////////////////////////////////////////////////////////////////////
        String motiv = esteMutareIlegala(mutare, i);
        if (motiv.equals("legal")) {
          // dacă nu spune macaua trebuie pedepsit

          // se adaugă cărțile
          if (mutare.cartiDePus != null) {
            for (int j = 0; j < Array.getLength(mutare.cartiDePus); j++) {
              cartiPuse.add(mutare.cartiDePus[j]); // pune cărțile jos
              Carte.scoate(cartiJucatori.get(i), mutare.cartiDePus[j]);
            }
          }

          // se trimit cărțile din teanc
          if (mutare.numarDeCarti > 0) trimitereCarti(i, mutare.numarDeCarti);

          // trebuie anunțați ceilanți jucatori de mutare
          for (int j = 0; j < jucatoriPrezenti.size(); j++)
            if (i != j) jucatoriPrezenti.get(j).mutareEfectuata(jucatoriPrezenti.get(i), mutare);

          // dacă a rămas fără nicio carte, a câștigat
          if (cartiJucatori.get(i).size() == 0) {
            cartiJucatori.remove(i);
            jucatoriIesiti.add(jucatoriPrezenti.remove(i));
            tureDeStat.remove(i);
          }
        } else {
          // trebuie să mai dau șanse dacă este jucator uman.
          // ////////////////////////////////////////////////////
          jucatoriPrezenti.get(i).mutareIlegala(motiv);
          System.out.println("Sa efectuat o mutare ilegală");
          System.exit(1);
        }
      }
    }
    System.out.println(
        "S-a terminat jocul!==========================================================================");
  }