// © 2025 Alessio Severi — vedi licenza nel file Main.java package impiccato; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; /** * Definisce gli elementi legati alla user experience (localizzazione linguistica) * del gioco dell'impiccato in una determinata lingua: * * - metodi di utilità per le lettere alfabetiche e * il percorso dei file di risorse * - un enumeratore per i messaggi testuali */ interface ItalianLanguage { /** * Crea e restituisce il sacchetto delle lettere alfabetiche disponibili per il gioco. * L'implementazione predefinita popola la lista con le lettere dell'alfabeto * nella lingua corrente. * * @return lista di caratteri che rappresenta il sacchetto delle lettere. */ default List riempiSacchetto() { final List sacchetto = new ArrayList<>(); // char car = 97; char car = 'a'; while(Character.isAlphabetic(car)) sacchetto.add(car++); return sacchetto; } /** * Elenco dei messaggi testuali utilizzati dal gioco. * Ogni costante rappresenta un messaggio specifico mostrato * all'utente in diverse fasi della partita. */ enum Message { WELCOME("Benvenuto nel gioco dell'impiccato"), ERROR_FILE("Errore: impossibile leggere le parole dal file "), GUESS_PROMPT("Giocatore 1: Indovina la parola segreta:"), USER_LETTERS("Giocatore 1: Riepilogo lettere scelte: "), CHOICE_PROMPT("Giocatore 1: Scegli un carattere ('ESC' per uscire) e premi 'INVIO': "), LETTER_CHOICE("Giocatore 2: Scelgo la lettera "), LETTER("la lettera"), CHARACTER("il carattere"), NOTICE_LETTER("Giocatore 1: Lettera già scelta"), WARNING_CHAR("Giocatore 1: Carattere non ammesso"), WIN_LETTER("Giocatore 1: Lettera indovinata!"), REMAIN_ONE("resta"), REMAIN_MANY("restano"), ATTEMPT_ONE(" tentativo."), ATTEMPTS_MANY(" tentativi."), LOSE_LETTER("Giocatore 1: Lettera non indovinata, "), STILL(" ancora "), SECRET_WORD("Giocatore 1: La parola è "), LOSE_GAME("Giocatore 1: Hai perso, la parola da indovinare era: "), WIN_GAME("Giocatore 1: Hai vinto!!"), EXIT("Giocatore 1: Grazie di aver giocato. Arrivederci!"); private final String text; Message(String text) { this.text = text; } /** * Restituisce il testo associato al messaggio. * * @return stringa localizzata corrispondente al messaggio. */ public String text() { return text; } } /** * Restituisce il percorso del file che contiene l'elenco delle parole * da utilizzare per l'estrazione della parola segreta. * * È pensato per essere esteso in futuro, ad esempio restituendo * percorsi diversi in base a più file di risorse. * * @return percorso del file delle parole. */ default Path pathFile() { // Estensioni: per es. aggiungi altre pah e ritorna una path casuale // tra quelle elencate Path path1 = Path.of("impiccato/files/parole.txt"); return path1; } }