// © 2025 Alessio Severi — vedi licenza nel file Main.java package personaggi; import java.util.Scanner; public class Combat implements LunaCombat, AvatarsCombat{ public static final Scanner sc = new Scanner(System.in); // unico punto di accesso private final String COLOR4= "\033[0m"; // reset colore protected final Personaggio[] avatars; // copia della copia del riferimento dell'stanza della classe Personaggio protected final boolean[] tipo_personaggio= {false, true, true}; // eroe, licantropo, vampiro protected final String[] fifhters= {null, null}; protected String modalita_combat; protected int n_round; public Combat(Personaggio[] avatars) { this.avatars = avatars; } public void setCombat(String choose_moon, String[] choose_avatars_combat) { tipo_personaggio[LICANTROPO]= switch (choose_moon.toLowerCase()) { case "auto" -> LunaCombat.setLunaCombat(); // genera random case "input" -> setLunaCombatI(); // input da tastiera --- se ovveride: { yield LunaCombat.super.setLunaCombat(3); } --- this.setLunaCombat(3); default -> setLunaCombat(choose_moon); // interpreta stringa "luna_on"/"luna_off" -- idem }; int[] avatars_combat= new int[avatars.length]; for (int i = 0; i < 2; i++) { avatars_combat[i]= switch (choose_avatars_combat[i].toLowerCase()) { case "auto" -> AvatarsCombat.setAvatarCombat(); // genera random case "input" -> setAvatarCombatI(); // input da tastiera --- se ovveride: { yield LunaCombat.super.setLunaCombat(3); } --- this.setLunaCombat(3); default -> setAvatarCombat(choose_avatars_combat[i]); }; } for (int i = 0; i < 2; i++) { avatars[avatars_combat[i]].setLuna(tipo_personaggio[avatars_combat[i]]); avatars[avatars_combat[i]].setForzaFisica(); fifhters[i]= Personaggio.AVATAR_NAME[avatars_combat[i]]; if(avatars_combat[0]== avatars_combat[1]){ modalita_combat= "allenamento"; break; } if(i== 1) modalita_combat= "combattimento"; } n_round++; } // scenario di battaglia/allenamento public String getLunaCombat(){ return (tipo_personaggio[LICANTROPO]) ? "Luna piena 🌕": "Luna NON piena 🌑"; } // esempio: 1° combattimento: Eroe vs Licantropo (luna piena) public void stampaHeaderRound(){ StringBuilder stringa= new StringBuilder(); stringa.append(n_round); stringa.append("° round - "); stringa.append(modalita_combat); stringa.append(": "); stringa.append(fifhters[0]); if(modalita_combat.equals("combattimento")){ stringa.append(" vs "); stringa.append(fifhters[1]); } stringa.append(" ("); stringa.append(getLunaCombat()); stringa.append(")"); System.out.println("\n\n"+stringa); } public void stampaRisulatatiCombatAvatars(){ System.out.println("\n"+COLOR4 + "Risulatato " + modalita_combat + ":"); // Stampa risultato finale for (int i = 0; i < 2; i++) { for (int j = 0; j < avatars.length; j++){ if(Personaggio.AVATAR_NAME[j].toLowerCase().equals(fifhters[i].toLowerCase())) System.out.println("Personaggio: " + fifhters[i] + " → forza: " + avatars[j].getForza() + " e round compiuti: " + avatars[j].getN_combat()); } if(modalita_combat.equals("allenamento")) break; } } public void stampaRisulatatiAvatars(){ System.out.println("\n\nRisulatati Avatars:"); // Stampa risultato finale for (int i = 0; i < avatars.length; i++) { System.out.println("Personaggio: " + Personaggio.AVATAR_NAME[i] + " → forza: " + avatars[i].getForza() + " e round compiuti: " + avatars[i].getN_combat()); } System.out.println("\n\n"); } public static void chiudiScanner() { sc.close(); // lo richiamo solo nel main a fine esecuzione } }