PlayPendium

Salvo · Spunti di riflessione

Dentro Salvo

Sotto il semplice gesto di cliccare le caselle si nasconde un motore deterministico che modella flotte nascoste, un ragionamento pesato sulle probabilità e il classico duello tra occultamento e scoperta. 3

Scritto e redatto in inglese. Questa versione italiana è stata prodotta con traduzione automatica; dove conta la precisione, fa fede l'originale inglese. Leggi l'originale in inglese →

I due tabelloni

Al cuore del gioco c'è una coppia di oggetti Board, uno che rappresenta la tua posizione nascosta e l'altro che rappresenta quella nascosta dell'avversario. Ogni tabellone ospita una flotta di navi disposte su una griglia quadrettata, ma le posizioni restano nascoste all'altra parte. Tu spari sulla griglia nemica mentre l'IA spara sulla tua, e ogni colpo o centra una nave o finisce in acqua. Questa architettura a doppio tabellone stabilisce l'asimmetria informativa fondamentale del duello a flotte nascoste: ciascuna parte conosce completamente il proprio tabellone, ma può solo dedurre la configurazione dell'altra dallo schema dei propri colpi. 3

La simmetria di questa impostazione è ciò che dà al gioco il suo carattere. Nessuna delle due parti vede direttamente le navi dell'altra. Entrambe devono invece costruirsi un modello mentale della griglia nascosta a partire dallo scarno feedback di colpiti e mancati. Ogni colpo diventa un dato, ogni colpito restringe le possibilità e ogni mancato elimina territorio dal campo delle ipotesi. Il coordinatore di partita del motore gestisce questi due tabelloni, assicurandosi che i colpi vengano registrati, che i colpiti siano attribuiti correttamente e che la partita finisca solo quando l'intera flotta di una delle due parti è stata affondata. 3

Un modello deterministico trasforma l'ipotesi alla cieca in una ricerca informata.

Disposizione casuale, regole deterministiche

Prima che la partita cominci, il motore chiama randomFleet per disporre le navi dell'IA in modo casuale. Questa casualità non è arbitraria: è governata da un seme, il che significa che un dato valore di seme produrrà sempre la stessa disposizione. Questo determinismo a seme è una scelta di progettazione che rende il gioco riproducibile e verificabile. Se avvii la partita con lo stesso seme, otterrai le stesse posizioni delle navi, la stessa sequenza di decisioni dell'IA e lo stesso esito. Questa proprietà è preziosa per il debug e per capire come si comporta l'IA in condizioni diverse. 3

Una volta schierata la flotta, le regole che governano il gioco sono fisse e deterministiche. L'IA non tira dadi e il motore non introduce casualità a partita in corso. Ogni decisione dell'IA discende dal modello di probabilità che mantiene, e ogni colpo che spari viene registrato e analizzato. L'unica fonte di variazione è il seme che determina la disposizione iniziale della flotta. Ciò significa che il gioco è, in fondo, un rompicapo: dati i vincoli delle regole e il feedback dei colpi, riesci a dedurre la configurazione nascosta prima che l'IA deduca la tua? 3

Sparare il colpo

Quando spari un colpo, il motore lo registra sul tabellone bersaglio e controlla se ha colpito o mancato. Questo avviene tramite la funzione fire, che aggiorna lo stato del tabellone e determina l'esito. Un colpito segna la casella come occupata da una nave, mentre un mancato la segna come acqua. Il motore controlla poi se la nave che contiene quella casella è stata affondata del tutto, esaminandone tutte le caselle. Se tutte le caselle di una nave sono state colpite, la nave è affondata e l'informazione viene comunicata a entrambe le parti. 3

La condizione di vittoria è semplice ma decisiva. Una parte vince quando tutte le navi dell'avversario sono affondate. Il controllo avviene tramite la funzione allSunk, che verifica se ogni nave sul tabellone avversario è stata colpita per intero. La partita termina immediatamente quando questa condizione è soddisfatta. La natura tutto-o-niente della condizione di vittoria significa che ogni colpo conta, e che la pressione ad affondare le navi in fretta va bilanciata con la necessità di non tradire la propria configurazione. 3

L'IA caccia per probabilità e chiude in modalità bersaglio.

Il motore delle probabilità

L'avversario in questo gioco non è un semplice tiratore casuale. È un'IA a puntamento probabilistico che soppesa quanto è probabile che ogni casella nascosta contenga una nave. L'IA mantiene un modello di probabilità della griglia nemica e lo aggiorna man mano che i colpi vengono sparati e arriva il feedback. Le caselle che non possono contenere navi, per via dei vincoli di posizionamento delle navi rimaste, vengono segnate come improbabili, mentre quelle che devono contenerne per ospitare le disposizioni rimanenti vengono segnate come probabili. L'IA spara poi sulla casella con la probabilità più alta, trasformando il tirare alla cieca in una ricerca informata. 3

Questo modello di probabilità affonda le radici nella matematica del calcolo delle probabilità, in cui gli eventi sono descritti da numeri compresi tra zero e uno 2. Una probabilità pari a zero significa che un evento non può verificarsi, mentre una probabilità pari a uno significa che deve verificarsi. L'IA usa queste descrizioni numeriche per guidare i suoi colpi, privilegiando le caselle in cui la probabilità di trovare una nave è più alta. È questo approccio a distinguere l'IA da un tiratore puramente casuale e a darle il suo caratteristico comportamento da cacciatrice.

Caccia e bersaglio

Il comportamento dell'IA si può descrivere in due fasi: caccia e bersaglio. Nella fase di caccia, l'IA cerca le navi sparando sulle caselle in cui è più probabile che si trovino navi non ancora scoperte. È una ricerca ad ampio raggio che punta a stabilire il primo contatto con le navi nemiche. Una volta registrato un colpito, l'IA passa alla fase di bersaglio, in cui si concentra sulle caselle adiacenti al colpito per finire di affondare quella nave. Questo approccio in due fasi rispecchia il modo in cui i giocatori umani affrontano il gioco: prima trova le navi, poi affondale. 3

Il passaggio tra caccia e bersaglio è determinato dal fatto che l'ultimo colpo sia stato un colpito o un mancato. Se l'ultimo colpo ha mancato, l'IA torna in modalità caccia e cerca le caselle con la probabilità più alta. Se l'ultimo colpo ha colpito, l'IA entra in modalità bersaglio e spara sulle caselle adiacenti al colpito. Questa regola semplice, combinata con il modello di probabilità, crea una strategia coerente che bilancia esplorazione e sfruttamento. L'IA esplora la griglia per trovare le navi e sfrutta la conoscenza di un colpito per affondare quella nave in modo efficiente. 3

Tre livelli di forza regolano il comportamento dell'IA.

Tre livelli di forza

L'IA ha tre livelli di difficoltà che ne regolano il comportamento. Questi livelli influenzano il modo in cui l'IA soppesa le probabilità e prende le decisioni. Ai livelli più bassi, l'IA può commettere più errori o essere meno aggressiva nel puntamento. Ai livelli più alti, l'IA è più coerente nei calcoli di probabilità e più spietata nel puntamento. Questa varietà di livelli permette ai giocatori di trovare la sfida che fa per loro, dalla partita rilassata alla competizione seria.

L'implementazione esatta di questi livelli vive nel componente IA del motore, la classe SalvoAI. I livelli di difficoltà modificano il modo in cui l'IA interpreta il modello di probabilità e il modo in cui bilancia esplorazione e sfruttamento. Questo design permette all'IA di essere insieme accessibile ai giocatori occasionali e impegnativa per quelli esperti, senza cambiare le meccaniche fondamentali del gioco. 3

La scansione sonar

Sopra le regole classiche si innesta una variante: la scansione sonar. Questa abilità permette a una parte di rivelare una lettura 3×3 della griglia nemica al costo del colpo di quel turno. Il sonar rivela se ogni casella dell'area 3×3 contiene una nave o è acqua. Questa informazione può essere preziosissima per restringere la posizione delle navi, ma si paga con la perdita del colpo per quel turno. 3

La decisione di usare il sonar è una scelta strategica. Quando l'informazione vale il suo prezzo? Se fai fatica a trovare le navi, il sonar può darti la svolta di cui hai bisogno. Se sei vicino ad affondare una nave, il costo di perdere il colpo potrebbe essere troppo alto. Il sonar aggiunge al gioco uno strato di gestione delle risorse, costringendo i giocatori a soppesare il valore dell'informazione rispetto al valore dell'azione. 3

Il riposizionamento è un'opzione difensiva utilizzabile una sola volta.

Il riposizionamento, una volta per partita

Un'altra variante rispetto alle regole classiche è il riposizionamento, concesso una volta per partita. Ogni parte può spostare una delle proprie navi una sola volta nel corso della partita. Questa schivata difensiva non costa un turno: puoi riposizionare e sparare comunque il tuo colpo nello stesso turno. L'abilità di riposizionamento ti permette di togliere dal pericolo una nave quando è minacciata, o di spostarla in una posizione più difendibile. 3

L'abilità di riposizionamento è un'opzione a uso singolo, e questo la rende preziosa. Quando usarla? Se una nave sta per essere affondata, riposizionarla può salvarla. Se sei sicuro della tua posizione attuale, riposizionare potrebbe essere uno spreco. La decisione di riposizionare è una scelta strategica che richiede un'attenta valutazione dello stato corrente della partita e delle probabili mosse del tuo avversario. 3

Un colpo per turno

Alla base di tutte queste meccaniche c'è la regola classica di un colpo per turno. Ogni parte spara esattamente un colpo per turno, alternandosi avanti e indietro. Questa regola stabilisce il ritmo del gioco e garantisce che entrambe le parti abbiano pari opportunità di agire. La regola di un colpo per turno è ciò che rende il gioco un duello di ingegno e non una gara di velocità. 3

Questa regola classica è ciò che radica il gioco nella tradizione della battaglia navale, un gioco di strategia e di ipotesi per due giocatori che si gioca su griglie quadrettate, in cui la flotta di ciascun giocatore è nascosta all'avversario 1. La regola di un colpo per turno è ciò che rende il gioco una prova di deduzione e probabilità e non una prova di riflessi. È una regola semplice, ma è quella che dà al gioco il suo carattere e la sua sfida.

Il determinismo puro rende il gioco verificabile.

Determinismo a seme

Il motore è puro e deterministico a seme, mosso dal proprio generatore di numeri casuali con seme. Ciò significa che ogni aspetto della partita è determinato dal valore di seme fornito all'inizio. Dato lo stesso seme, la partita produrrà sempre la stessa sequenza di eventi, dalla disposizione iniziale della flotta all'ultimo colpo. Questa proprietà rende il gioco verificabile, perché lo stesso scenario può essere riprodotto ed esaminato. 3

Il determinismo a seme ha implicazioni anche per la comprensione del gioco. Se vuoi capire come si comporta l'IA in uno scenario particolare, puoi avviare la partita con un seme specifico e osservare l'esito. Se vuoi mettere alla prova una strategia particolare, puoi giocare più volte con lo stesso seme e vedere come rende. Questa riproducibilità è una caratteristica preziosa tanto per i giocatori quanto per gli sviluppatori.

Sources & notes

  1. "Battleship (game)," Wikipedia, a strategy-type guessing game for two players, played on ruled grids on which each player's fleet of warships is marked and concealed from the opponent; players alternate calling shots at the other's grid to hit and sink ships, aiming to sink the entire fleet; the game evolved from a pencil-and-paper game dating to around the World War I era; the first commercial version was called Salvo, published by the Starex company in 1931, and in 1967 Milton Bradley published a version using plastic pegboards and miniature ships; and in the "salvo" variant a specified number of squares are targeted at one time, all attacked simultaneously. en.wikipedia.org/wiki/Battleship_(game).
  2. "Probability," Wikipedia, a branch of mathematics concerning numerical descriptions of how likely events are to occur; the probability of an event is a number between 0 and 1, where 0 indicates impossibility and 1 indicates certainty, and the larger the probability the more likely the event (for example, a fair coin flip has probability 0.5 for each outcome). en.wikipedia.org/wiki/Probability.
  3. This game's engine: a Battleship game where each side has a Board with a hidden fleet, the human fires at the enemy fleet and the AI at the human's, one shot per turn (classic rules), fire records a hit or miss, and a side wins when the opponent's ships are all sunk (allSunk); the opponent is a probability-targeting SalvoAI with three difficulty strengths that "hunts" for ships by favouring the cells where an undiscovered ship is most likely to sit and then "targets" the neighbours of a hit to finish it; two twists sit on the classic rules, a sonar ping reveals a 3×3 ship/empty readout but costs that turn's shot, and each side may reposition one of its own ships once per game (a dodge that does not cost the turn); and the engine is pure and seeded-deterministic.
  4. Further reading on Probability, Interpretations of Probability (Stanford Encyclopedia of Philosophy/Winter 2012 Edition). plato.stanford.edu.
  5. Further reading on Probability, Probability -- from Wolfram MathWorld. mathworld.wolfram.com.
  6. Further reading on Probability, Logical foundations and measurement of subjective probability. doi.org.
Was this worth reading?
← Back to Salvo
PlayPendium · About · Contact · Privacy · Terms · Cookies · Accessibility · Copyright · Browse all games · Inspirations · © 2026