
Programmare in java: 5. Gioco dell’impiccato
Introduzione
Tra i giochi “di carta e matita”, l’impiccato è uno dei più semplici e, allo stesso tempo, uno dei più carichi di tensione nella sua eleganza. Una parola nascosta, qualche trattino e un omino che si costruisce errore dopo errore: ogni scelta sbagliata aggiunge un tratto al disegno, finché la figura è completa e la partita si chiude con un GAME OVER. Nessuna tecnologia, solo alfabeto, intuizione e un po’ di suspense.
Le origini precise del gioco non sono del tutto chiare. Alcuni storici lo collegano ai passatempi scolastici di fine Ottocento, quando l’alfabetizzazione cominciò ad allargarsi e la lingua scritta divenne terreno di sfida. In un’aula o in un doposcuola, insegnanti e studenti usavano l’impiccato per allenare ortografia, vocabolario e velocità mentale. Il disegno dell’omino non rappresentava una vera condanna, ma la posta in gioco simbolica di una scommessa con le parole.
Dietro la sua leggerezza, l’impiccato nasconde una logica precisa. Ogni tentativo modifica lo spazio delle possibilità: una lettera indovinata restringe il campo, un errore lo lascia quasi intatto. Giocare bene significa osservare il pattern delle lettere scoperte, scegliere le consonanti più frequenti, ragionare per ipotesi. È una piccola lezione di statistica informale, di ricerca guidata dal feedback.
Nel linguaggio della programmazione, questo gioco diventa ancora più interessante. La “parola segreta” si trasforma in una stringa, i trattini in un modello da aggiornare, i tentativi in un ciclo controllato da condizioni. L’omino disegnato a mano lascia il posto a una rappresentazione testuale in console, ma la struttura rimane la stessa: una sfida tra conoscenza e limite, tra informazione disponibile e informazione nascosta.
Scrivere un programma per l’impiccato significa, in fondo, tradurre un gioco dell’infanzia in un algoritmo. Il codice prende il posto del foglio, ma il cuore resta identico: indovinare una parola, un carattere alla volta, prima che l’omino si completi.
Risultato (estratto dell’esecuzione)
Il programma è stato sviluppato in Java con un’attenzione particolare all’architettura, alla modularità e alla possibilità di estensione. La logica del gioco non è legata a una singola lingua né a una singola interfaccia testuale, ma a una classe che riceve dall’esterno alfabeti, messaggi, parole segrete e il rendering dell’impiccato in base allo stato interno.
Sul piano del linguaggio, il progetto utilizza alcuni strumenti tipici di una progettazione in Java. L’uso di un’interfaccia con metodo di default per l’estrazione delle parole mostra come sia possibile definire un’implementazione predefinita, un comportamento astratto riutilizzabile e, allo stesso tempo, specializzarlo in una classe che lo implementa tramite covarianza del tipo di ritorno: il contratto dell’interfaccia rimane valido, ma la classe specializzata adatta il dato al modello interno del gioco. Infine il dynamic dispatch organizza il flusso logico in esecuzione.
La parte linguistica è organizzata attraverso più componenti all’interno di una interfaccia dedicata, tra cui un enum annidato che raccoglie e centralizza tutti i messaggi del gioco come costanti simboliche: a ogni testo è associato un identificatore semantico. Questo rende la localizzazione una proprietà strutturale: una nuova lingua coincide con una nuova interfaccia analoga, dotata di un nuovo insieme coerente di alfabeti, parole e messaggi, senza modificare la logica di gioco centrale e la struttura del progetto.
Sul piano tecnico, la lettura delle parole usufruisce delle API di java.nio.file per lavorare con percorsi e file in modo dichiarativo, mentre l’utilizzo delle Java Stream API ha permesso di ottenere una struttura dati adatta all’elaborazione della logica di gioco.
Nel complesso, la scelta di tenere nettamente separata la gestione dell’I/O dalla logica e di rappresentare i dati in forme via via più specifiche rende evidente il passaggio di responsabilità tra interfacce, implementazioni e modello di gioco. In sintesi, si mette in evidenza come un gioco console-based, tradizionale e minimalista, possa divenire un progetto strutturato tramite aspetti tipici di Java — multiereditarietà di tipo, enum, covarianza, Stream API, dynamic dispatch —, con una chiara separazione dei livelli.





Link utili
▶ Esegui il programma su Replit:
- Clicca sul link Apri su Replit per accedere al progetto.
- Se non hai un account Replit, registrati gratuitamente oppure accedi con Google/GitHub.
- Una volta nel progetto, premi “Run” per avviare l’esecuzione.
- Puoi consultare il file sorgente e, se desideri, scaricarlo o copiarlo dal pannello di codice a sinistra.
▶ Requisiti:
- Java JDK 8 o superiore installato (verifica con
java -version). - Console o IDE compatibile con UTF-8.
▶ Scarica la versione portatile del codice:
- Effettua queste tre semplici operazioni:
- Clicca sul link Scarica File per scaricare il file Main.txt, che contiene il codice sorgente completo in formato .txt.
- Clicca sul link Scarica File per scaricare il file ImpiccatoGame.txt, che contiene il codice sorgente completo in formato .txt.
- Clicca sul link Scarica File per scaricare il file IOImpiccato.txt, che contiene il codice sorgente completo in formato .txt.
- Clicca sul link Scarica File per scaricare il file ItalianLanguage.txt, che contiene il codice sorgente completo in formato .txt.
- Rinomina i file cambiando l’estensione da .txt a .java.
- A. Se usi un IDE Java (VS Code, IntelliJ, NetBeans, Eclipse), crea un nuovo progetto java vuoto e aggiungi il package impiccato; poi importa i quattro file e avvia la classe Main.java come Java Application.
- B. Se invece vuoi eseguirlo senza IDE, crea una cartella chiamata impiccato e inserisci al suo interno i quattro file .java.
- B. Apri il terminale nella cartella che contiene impiccato/ e usa uno dei comandi seguenti:
macOS / Linux :
mkdir -p out && javac -encoding UTF-8 -d out $(find . -name "*.java") && java -Dfile.encoding=UTF-8 -cp out impiccato.Main
Windows (PowerShell):
mkdir out; javac -encoding UTF-8 -d out (Get-ChildItem -Recurse -Filter *.java).FullName; java -Dfile.encoding=UTF-8 -cp out impiccato.Main
Windows (Prompt dei comandi): esegui i comandi uno alla volta (senza ; tra di essi). Esempio:
mkdir out
javac -encoding UTF-8 -d out *.java
java -Dfile.encoding=UTF-8 -cp out impiccato.Main
▶ Utilizzo:
Dopo l’avvio, la console ti guida passo-passo:
- inserisci un carattere (‘ESC’ per uscire) e premi ‘INVIO’ per indovinare la parola segreta,
- termina il gioco:
- indovinando la parola segreta,
- esaurendo gli 8 tentativi a disposizioni,
- digitando il carattere ‘ESC’ per uscire e premendo INVIO’ .
Codice
Il gioco dell’impiccato, in questa versione, diventa un piccolo sistema a stati finiti: a ogni lettera inserita cambiano simultaneamente la maschera sulla parola segreta, il numero di tentativi disponibili, la memoria delle scelte effettuate e la rappresentazione grafica in ASCII dell’impiccato.
Allo stesso modo, la separazione delle responsabilità e la modularità del codice rispecchiano un principio di chiarezza logica dove il flusso del gioco si mantiene trasparente, leggibile e adattabile.
Mentre la traiettoria di una partita oscilla tra inferenza probabilistica e alea, con un esito che dipende dalla qualità delle ipotesi del giocatore.
