/** * 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"; }
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!=========================================================================="); }