RPG IDLE Game Engine
Engine backend in Python e FastAPI per Idle RPG: progressioni offline calcolate dai timestamp, statistiche personaggi e combattimenti automatizzati che proseguono anche quando il giocatore non è connesso.
Il problema
In un Idle RPG il gioco non si ferma quando il giocatore chiude l'app: combattimenti, viaggi e raccolta risorse proseguono in background. Al rientro, l'engine deve calcolare tutto ciò che è accaduto in base al tempo trascorso e restituire uno stato coerente — non approssimato, non mancante, ma esatto.
Ogni personaggio ha statistiche, inventario e progressi che dipendono dagli eventi elaborati durante l'assenza. Un calcolo impreciso o incompleto rompe l'equilibrio di gioco e l'esperienza del giocatore: la correttezza dello stato al rientro è un requisito funzionale, non un optional.
Con molti utenti connessi contemporaneamente, ognuno con uno stato persistente e indipendente da elaborare, serviva un'architettura che distribuisse il calcolo senza creare colli di bottiglia né influenzare le performance degli altri giocatori.
Le API dovevano essere documentate e testabili facilmente così da poter integrare rapidamente nuove meccaniche di gioco e verificare la correttezza dei calcoli in sviluppo.
Come l'ho affrontato
Ho sviluppato un engine backend in Python e FastAPI con architettura asincrona: ogni giocatore ha il proprio stato indipendente, e l'elaborazione di un utente non influenza mai le performance di un altro.
La progressione offline è il cuore del sistema: al rientro del giocatore, l'engine calcola in un'unica operazione tutto il tempo trascorso — combattimenti vinti e persi, risorse raccolte, viaggi completati — e applica le conseguenze allo stato del personaggio. Nessuna simulazione continua in background, solo calcolo preciso basato sui timestamp.
Le statistiche dei personaggi — livelli, equipaggiamento, abilità — vengono aggiornate a ogni elaborazione in base agli eventi calcolati, garantendo coerenza tra stato attuale e storia degli eventi.
Lo stato è persistito su PostgreSQL e le API sono documentate automaticamente via OpenAPI: ogni endpoint è testabile e integrabile con contratti chiari.

Architettura & Tecnologie
Backend Python con FastAPI asincrono e persistenza PostgreSQL. La progressione offline è calcolata su base temporale: al rientro di ogni giocatore, l'engine elabora in un'unica operazione tutti gli eventi accaduti durante l'assenza — combattimenti, viaggi, risorse — applicandoli allo stato attuale del personaggio. L'architettura asincrona garantisce che l'elaborazione di molti utenti simultanei non crei colli di bottiglia, mantenendo il servizio stabile anche sotto carico elevato.
Caratteristiche principali
Progressione offline calcolata al rientro: un'unica operazione che ricostruisce tutti gli eventi accaduti durante l'assenza con precisione temporale
Combattimenti, viaggi e risorse automatizzati: il gioco progredisce anche offline, tutto calcolato su base temporale
Architettura asincrona per molti utenti simultanei: l'elaborazione di un giocatore non influenza mai le performance degli altri
API documentate via OpenAPI: endpoint testabili e integrabili con contratti chiari
Stato persistente e coerente: ogni progresso è salvato su PostgreSQL e restituito intatto al rientro

Risultati
Lo stato è sempre coerente al rientro: combattimenti, viaggi e risorse vengono calcolati con precisione in base al tempo trascorso, senza approssimazioni e senza perdita di progressi.
Il gioco progredisce anche offline: i giocatori ritrovano il mondo di gioco evoluto — livelli guadagnati, risorse accumulate, battaglie vinte — come se avessero giocato continuamente.
Molti utenti, nessun collo di bottiglia: l'architettura asincrona distribuisce il calcolo tra i giocatori, garantendo stabilità anche con centinaia di progressioni simultanee.
Un problema simile al tuo?
Parliamone: costruiamo qualcosa che regga al primo colpo e per gli anni a venire.
Parliamone