Programmare in java: 3. Bingo

Programmare in java: 3. Bingo

Introduzione

    Nelle case del Sud Italia, durante le feste di Natale, il suono dei numeri estratti dalla tombola scandiva le serate in famiglia. Era un gioco semplice, ma capace di riunire generazioni diverse attorno alla stessa attesa: il numero chiamato, la risata, la vittoria condivisa. La tombola nacque nel XVIII secolo a Napoli, durante il regno di Carlo di Borbone. In particolare nel 1734, infatti, il gioco del lotto era già molto diffuso ma anche discusso e contrastato: da un lato il governo borbonico voleva legalizzarlo per regolare le scommesse e incassare tasse, dall’altro il clero, invece, si opponeva, sostenendo che distraesse i fedeli dalle preghiere durante le festività natalizie.

Per placare le tensioni, il re decise di sospendere le estrazioni del lotto durante il periodo di Natale. Ma i napoletani, ingegnosi com’erano, inventarono una versione domestica del gioco: al posto delle puntate di denaro, si giocava in casa con fagioli o ceci secchi come segnalini, cartelle disegnate a mano, e un panariello — il cestino in vimini — per estrarre i numeri. Così nacque la tombola napoletana, che da allora divenne una tradizione natalizia familiare e un momento di condivisione più che di gioco d’azzardo.

Nei decenni successivi, la tombola si diffuse in tutta Italia, e nel Novecento, con la migrazione italiana verso gli Stati Uniti, ispirò la nascita del bingo moderno, regolamentato come gioco pubblico nel 1929 e poi esportato in tutto il mondo. Da quel retaggio popolare è nato il bingo, che ne conserva la struttura e lo spirito: estrarre numeri, segnare caselle, attendere la combinazione vincente. Ma dietro la semplicità del gesto si nasconde una logica di ordine e caso, una danza tra probabilità e casualità, tra algoritmo e fortuna.

Oggi, nel linguaggio della programmazione, il bingo diventa un esercizio di logica e astrazione: generare cartelle, gestire estrazioni, verificare vincite. Come nella tombola di un tempo, anche qui ogni numero è parte di un sistema, e ogni estrazione è un passo verso la soluzione.

Scrivere un programma per il bingo significa tradurre un rituale collettivo in linguaggio formale, restituendo alla macchina la capacità di giocare, contare, e in un certo senso — di “partecipare”.

Risultato (estratto dell’esecuzione)

    Il programma è stato sviluppato in Java con un approccio orientato alla chiarezza logica e alla modularità.

Ogni componente — estrazione dei numeri, generazione delle cartelle, verifica delle vincite — è stato progettato come parte autonoma di un sistema coerente, in cui la comunicazione tra le classi mantiene il flusso di gioco trasparente e controllato.

L’uso estensivo delle Java Stream API ha permesso di rappresentare in modo conciso le operazioni di filtraggio, generazione e mappatura dei dati, riducendo la complessità sintattica e migliorando la leggibilità.

Attraverso flussi e lambda expressions, il codice realizza la gestione delle estrazioni e la costruzione delle cartelle come processi funzionali, più vicini al linguaggio matematico che a quello procedurale.

L’obiettivo è stato quello di simulare la dinamica reale del bingo, ma con una struttura completamente automatizzata: il programma crea le cartelle, estrae i numeri, registra le vincite e rigenera l’intero set per una nuova partita senza intervento esterno.

Ogni esecuzione è autonoma e ripetibile, garantendo un equilibrio tra casualità controllata e riproducibilità logica.

Questo approccio mette in luce il carattere computazionale e simbolico del gioco: un intreccio tra alea e struttura, dove il caso incontra la regola e la macchina diventa parte del rito del gioco stesso.
 


Link utili

▶ Esegui il programma su Replit:

  1. Clicca sul link Apri su Replit per accedere al progetto.
  2. Se non hai un account Replit, registrati gratuitamente oppure accedi con Google/GitHub.
  3. Una volta nel progetto, premi “Run” per avviare l’esecuzione.
  4. Puoi consultare il file sorgente e, se desideri, scaricarlo o copiarlo dal pannello di codice a sinistra.


▶ Requisiti:

  1. Java JDK 8 o superiore installato (verifica con java -version).
  2. Console o IDE compatibile con UTF-8.


▶ Scarica la versione portatile del codice:

  1. 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 Bingo.txt, che contiene il codice sorgente completo in formato .txt.
    • Clicca sul link Scarica File per scaricare il file CartellaUtente.txt, che contiene il codice sorgente completo in formato .txt.
  2. Rinomina i file cambiando l’estensione da .txt a .java.
  3. A. Se usi un IDE Java (VS Code, IntelliJ, NetBeans, Eclipse), crea un nuovo progetto java vuoto e aggiungi il package bingo; poi importa i tre file e avvia la classe Main.java come Java Application.
  1. B. Se invece vuoi eseguirlo senza IDE, crea una cartella chiamata bingo e inserisci al suo interno i tre file .java.
  2. B. Apri il terminale nella cartella che contiene bingo/ 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 bingo.Main


Windows (PowerShell):

mkdir out; javac -encoding UTF-8 -d out (Get-ChildItem -Recurse -Filter *.java).FullName; java -Dfile.encoding=UTF-8 -cp out bingo.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 bingo.Main


▶ Utilizzo:

Dopo l’avvio, la console ti guida passo-passo:

  1. inserisci il numero dei giocatori,
  2. il programma genera e stampa ogni cartella in un file .txt (e le salva in src/bingo/cartelle_utenti/ – su Replit in src/bingo/cartelle_utenti/),
  3. premi INVIO per ogni estrazione: viene mostrato il numero estratto e il gioco si mette in pausa per permettere ai partecipanti di segnare tale numero sulla propria cartella,
  4. a ogni vincita viene stampato un resoconto (numeri estratti fino a quel momento e la cartella del vincitore).

Per una nuova partita ti basta rilanciare il programma: le cartelle utente vengono cancellate e rigenerate automaticamente all’inizio.


Codice

    L’architettura del programma è organizzata in più classi distinte, ognuna con un ruolo specifico nella logica del gioco:

Bingo gestisce l’estrazione dei numeri e il controllo delle vincite, e CartellaUtente rappresenta la struttura dati delle singole cartelle e del sacchetto. Nella classe Main, il metodo statico main() coordina l’intero flusso di esecuzione, mantenendo il codice principale essenziale e leggibile, mentre gli altri metodi si occupano della scrittura delle cartelle in file .txt, garantendo portabilità e facilità di distribuzione.

Il cuore del progetto è tuttavia la classe Bingo, dove la logica di estrazione e verifica è implementata in modo indipendente, così da poter essere riutilizzata o estesa facilmente.

Il gioco è pensato per un utilizzo multiplayer, con la generazione automatica di cartelle salvate in formato .txt, rendendolo portabile e facilmente condivisibile tra diversi utenti.

La separazione delle responsabilità e la modularità del codice rispecchiano un principio di chiarezza logica: ogni classe opera come parte di un sistema coerente, dove il flusso del gioco si mantiene trasparente, leggibile e adattabile.