Russia 1917: Costruire l’IA dei nemici – i Bianchi

Il punto di febbraio 2025 sulla creazione, in GDevelop, di un’intelligenza artificiale strategica per gli eserciti bianchi.

Prototipo di Russia 1917 che mostra la mappa strategica tra Murmansk, Arcangelo e Helsinki
Prototipo di Russia 1917 che mostra la mappa strategica tra Murmansk, Arcangelo e Helsinki

In questo periodo sto lavorando a un gioco ambientato in Russia nel 1917, nel pieno della guerra civile. Il giocatore veste i panni dei bolscevichi, ma ho bisogno di un’intelligenza artificiale che prenda il controllo degli eserciti bianchi, le forze opposte ai bolscevichi che cercano di riprendere il controllo del paese.

L’obiettivo del gioco? Spostare le proprie truppe, conquistare città strategiche e affrontare il nemico. Per rendere il tutto interessante, l’IA degli eserciti bianchi doveva essere in grado di prendere decisioni militari coerenti.

Il problema: GDevelop, il motore che utilizzo per realizzare il gioco, non gestisce naturalmente intelligenze artificiali complesse. Ho quindi dovuto trovare un metodo affidabile che permettesse all’IA di funzionare passo dopo passo senza provocare bug.

L’IA degli eserciti bianchi: una strategia militare per fasi

Nel mio gioco, l’esercito bianco deve agire per fasi:

  1. individuare le città libere da conquistare;
  2. valutare la minaccia bolscevica nelle vicinanze;
  3. scegliere se attaccare o rafforzarsi;
  4. spostare le proprie truppe in modo intelligente.

Per far funzionare tutto correttamente, ho messo a punto un metodo logico e ben strutturato. Ecco come l’IA prende le sue decisioni:

  • comincia creando un cerchio di rilevamento invisibile attorno a ciascuna delle sue città e unità;
  • se un soldato nemico entra in contatto con uno di questi cerchi, significa che si trova nelle vicinanze e rappresenta una minaccia;
  • l’IA individua quindi le truppe più vicine a quel nemico e ordina loro di attaccarlo;
  • se non viene rilevato alcun nemico, l’IA invia le proprie unità a conquistare una nuova città per espandere il territorio.

Icona di Russia 1917 ispirata al costruttivismo russo

L’icona del gioco «Russia 1917» utilizzata al momento della pubblicazione di questo articolo.

La classica trappola di GDevelop: tutto viene eseguito nello stesso momento

All’inizio avevo scritto la mia IA in questo modo:

  1. creare cerchi di rilevamento attorno alle città e alle truppe;
  2. passare alla fase successiva per identificare i nemici;
  3. passare alla fase successiva per scegliere un’azione;
  4. passare alla fase successiva per spostare le truppe.

In teoria sembra ordinato. Nella pratica? Un disastro.

Perché? Perché dire «fase = 2» non significa che la fase 1 sia davvero terminata. L’IA iniziava quindi a fare tutto contemporaneamente: creare i cerchi, analizzare i nemici e spostare le truppe nel corso di un singolo fotogramma del gioco.

La vera soluzione: convalidare ogni azione prima di avanzare

Questa è la grande scoperta che ho fatto lavorando su questa IA:

Non bisogna mai limitarsi a cambiare una variabile per avanzare in un processo. Bisogna sempre creare una condizione che verifichi che l’azione precedente sia effettivamente terminata.

In concreto, invece di fare:

❌ «Se fase = 1, allora fai questo e passa alla fase 2».

Faccio piuttosto:

✅ «Se la fase 1 è terminata — per esempio, se tutti i cerchi sono stati creati correttamente — allora, e solo allora, si passa alla fase 2».

Schema delle quattro fasi decisionali dell’intelligenza artificiale di Russia 1917

L’IA in azione: creazione dei cerchi di rilevamento, analisi della situazione, presa di decisione ed esecuzione degli ordini.

Perché questo metodo è essenziale

Con questo approccio, l’IA non corre troppo avanti e funziona in modo fluido. Ogni azione viene completata interamente prima di passare alla successiva, evitando così i bug in cui tutto viene eseguito contemporaneamente.

E questo cambia tutto:

  • l’IA sembra più intelligente, perché reagisce progressivamente a ciò che accade;
  • scompaiono i bug in cui tutte le azioni vengono attivate nello stesso momento;
  • il gioco diventa più strategico, perché gli eserciti bianchi rispondono realmente alle azioni del giocatore.

Conclusione: una tecnica da ricordare per GDevelop

Se vuoi realizzare un’IA efficace in GDevelop, o anche semplicemente strutturare un algoritmo complesso, ricorda questo:

Non fare mai soltanto «fase = 2». Verifica sempre che la fase 1 sia davvero terminata prima di continuare.

È la chiave per evitare che GDevelop esegua tutto nello stesso momento e per creare un’IA fluida, logica e strategica.

Ora che sono riuscito a strutturare questo sistema, potrò aggiungere ancora più intelligenza agli eserciti bianchi. Forse persino dotarli di strategie più avanzate, come attacchi coordinati o ritirate tattiche…