public class RezolvareFAIMA {
private static final int RUNDE_MAX = 200;
private static final int FETE_ZAR = 6;
private static final int MAX_TURE_MASCARICI = 4;
/*Adunam intr-un vector de String textele aferente tuturor actiunilor
* ce pot aparea in joc. Observati ca actiunile aferente zarurilor 2,3,4,5
* apar de doua ori, ca sa le putem adresa direct. De asemenea, apare si o
* actiune aferenta zarului virtual 7, care se obtine din zarul 6 + bonus de
* contraatac. La sfarsit, adaugam si celelalte mesaje pe care le vom transmite
* si pe care le vom adresa individual.
* Observati ca mesajele contin indicatori (e.g. {0}, {1}) in locurile unde
* vom completa cu alte elemente de text, folosind clasa MessageFormat.
*/
private static final String[] ACTIUNI = new String[]{"{0} Rateaza",
"{0} il infige pe {1} in pamant pana la genunchi",
"{0} il infige pe {1} in pamant pana la genunchi",
"{0} il infige pe {1} in pamant pana la brau",
"{0} il infige pe {1} in pamant pana la brau",
"{0} il infige pe {1} in pamant pana la gat",
"{0} il infige pe {1} in pamant pana la gat",
"{0} foloseste Apa Vie. Rezultat: {1}",
"{0} castiga.",
"{0} se salveaza.",
"Incaierarea se termina la egalitate",
"Mascariciul e in joc"};
private static final String[] COMBATANTI = new String[]{"Greuceanu", "Zmeul"};
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int tureMascarici = 0;
int bonusContraatac = 0;
/* Variabila alCuiERandul este un int, 1 sau 0, pentru a putea adresa
* vectorul de combatanti direct
*/
int alCuiERandul = 0;
boolean[] aFolositApaVie = new boolean[2];
int runda;
for (runda = 0; runda < RUNDE_MAX; runda++) {
/*
* Intai da cu zarul povestitorul, daca mascariciul nu e in joc
*/
if (tureMascarici == 0) {
int zarPovestitor = (int) (Math.random() * FETE_ZAR + 1);
if (zarPovestitor == 6) {
tureMascarici = MAX_TURE_MASCARICI;
System.out.println(ACTIUNI[11]);
}
}
/*
* Da cu zarul jucatorul si se calculeaza scorul atacului,
* care se si tipareste
*/
int zarJucator = (int) (Math.random() * FETE_ZAR + 1);
if (tureMascarici > 0) {
zarJucator = FETE_ZAR + 1 - zarJucator;
}
zarJucator += bonusContraatac;
if (zarJucator == 1) {
bonusContraatac = 1;
} else {
bonusContraatac = 0;
}
/*
* MessageFormat.format ne ajuta sa compunem un mesaj pe baza
* unui model si a unor argumente. Mesajul de la metrou, alcatuit cu
* MessageFormat ar arata cam asa:
* String model="Urmeaza statia {0} cu peron pe partea {1}.";
* MessageFormat.format(model,new Object[]{"Piata Unirii","dreapta"};
* rezultatul fiind:
* Urmeaza statia Piata Unirii cu peron pe partea dreapta
*/
System.out.println(MessageFormat.format(ACTIUNI[zarJucator - 1], new Object[]{COMBATANTI[alCuiERandul], COMBATANTI[1 - alCuiERandul]}));
/*
* Daca jucatorul e pe cale sa castige
*/
if (zarJucator >= 6) {
/*
* Daca adversarul nu a folosit inca apa vie
*/
if (!aFolositApaVie[1 - alCuiERandul]) {
/*
* Calculam scorul de la apa vie, tinand cont si de mascarici
*/
int zarApaVie = (int) (Math.random() * FETE_ZAR + 1);
if (tureMascarici > 0) {
zarApaVie = FETE_ZAR + 1 - zarApaVie;
}
/*
* Afisam rezultatul de la apa vie
*/
System.out.println(MessageFormat.format(ACTIUNI[7], new Object[]{COMBATANTI[1 - alCuiERandul], zarApaVie}));
if (zarApaVie < 5) {
/*
* Jucatorul a castigat; iesim din iteratie
*/
System.out.println(MessageFormat.format(ACTIUNI[8], COMBATANTI[alCuiERandul]));
break;
} else {
/*
* Adversarul s-a salvat
*/
aFolositApaVie[1 - alCuiERandul] = true;
System.out.println(MessageFormat.format(ACTIUNI[9], COMBATANTI[1 - alCuiERandul]));
}
} else {
/*
* Jucatorul a castigat; iesim din iteratie
*/
System.out.println(MessageFormat.format(ACTIUNI[8], COMBATANTI[alCuiERandul]));
break;
}
}
/*
* Daca mascariciul e in joc, scadem turele alocate lui
*/
if (tureMascarici > 0) {
tureMascarici--;
}
/*
* Schimbam randul
*/
alCuiERandul = 1 - alCuiERandul;
}
/*
* Am terminat iteratia; daca am ajuns la numarul maxim de runde
* inseamna ca nimeni nu a castigat. Afisam mesajul de egalitate.
*/
if (runda == RUNDE_MAX) {
System.out.println(ACTIUNI[10]);
}
}
}
0 comentarii:
Trimiteți un comentariu