CLICK QUI PER SCARICARE IL GIOCO DA GOOGLE PLAY STORE
Introduzione
E’ possibile usare l’I.A. per creare un videogioco, con una grafica accattivante, sviluppato su diversi livelli di difficoltà crescente, comprendente schermate introduttive, menu, sistemi premianti basati sul superamento dei livelli … insomma un gioco vero che non sia il solito snake degli anni ottanta, il tutto sviluppato con il solo ausilio dell’intelligenza artificiale ?
Questa era la domanda che mi ero posto dopo aver visto diversi video nei quali tramite il bot ChatGPT venivano sviluppati giochi da zero. Il più delle volte con grafica spartana e più simile ad una produzione dei primi anni 80 piuttosto che una realizzazione recente.
Ho deciso allora di provare ad avventurarmi in qualcosa di più complesso, utilizzando la versione a pagamento di ChatGPT e il game engine Unity.
Strumenti utilizzati
ChatGPT 4o versione a pagamento.
Unity release 2022.3.46f1
Primo approccio: che tipo di gioco fare
Non sono un programmatore, non faccio videogiochi di professione e neanche ci gioco normalmente. Però mi piace crearli nel tempo libero, trovo affascinante il legame tra arte, creatività, logica, strategia di sviluppo, matematica degli algoritmi, insomma la fusione di scienza ed arte nello sviluppo di un gioco. Qualche oretta a settimana, mi ritiro nel mio angolino, potrei dipingere, fare la settimana enigmistica, scrivere, leggere un libro, insomma ci sono tante attività che tengono allenata la mente, invece no, io apro Unity che per chi non lo sapesse è un game engine, tradotto: un programma per fare programmi di giochi, e inizio a scrivere codice. La maggior parte delle volte ne escono degli obbrobri osceni che mollo lì e la volta dopo riparto da zero.
Invece stavolta le cose sono andate in maniera diversa, mi sono detto: perché non usare l’I.A. per creare un videogioco ? Mi siedo alla mia scrivania, cerco l’estasi creativa per la mia oretta di allenamento mentale ma non ne cavo nulla. Allora prendo il chat bot più famoso al mondo e scrivo: “dammi un’idea per un’app” e questo se ne esce proponendomi quella che poi ho ribattezzato la parabola del seminatore: un contadino lancia dei semi e il giocatore deve dirigere il vento per farli cadere sulla terra anziché tra le rocce o i rovi. Dico, sta a vedere che quelli di openai gli fanno avere anche le visioni mistiche a sto bot. Però l’idea non era male, la rielaboro e penso che invece dei semi posso usare dei palloncini e invece di farli cadere a terra dirigerli verso un percorso più o meno complesso per arrivare all’uscita.
La scrittura del codice
Già che ci sono gli chiedo di scrivermi il codice e la grafica, e qui inizia un’esperienza interessante. Il bot crea il codice ma molto spesso contiene errori che devo dire il più delle volte mi ha fatto perdere più tempo scovarli che non se avessi scritto tutto da zero.
In effetti, più è complicato quello che gli chiedo e più sono gli errori che commette, inoltre comincio ad avere difficoltà a seguire il filo di quello che sta facendo e la sua logica di programmazione.
Allora cambio strategia, voglio ancora usare l’I.A. per creare un videogioco ma la logica del programma la decido io e a lui faccio fare piccole parti di codice, in pratica l’impostazione di quello di cui ho bisogno, in altri termini il lavoro sporco, e poi io vado ad affinarlo in base a quello che mi serve.
Funziona, mi fa risparmiare un sacco di tempo, ho il controllo del codice prodotto e riesco a progredire come mai prima d’ora così stavolta porto a termine la mia piccola creatura. La trovate su Play Store cercando ColorfulFlight, questo il link.
Conclusioni – USARE L’I.A. PER CREARE UN VIDEOGIOCO … ha funzionato ?
Oggi, e intendo proprio oggi 13 novembre 2024 alle 19:30 quando sto scrivendo l’articolo, siamo ancora lontani dal poter usare l’I.A. per creare un videogioco o più in generale l’Intelligenza Artificiale che scrive completamente un codice complesso senza errori.
Serve la verifica e il controllo dello sviluppatore per capire come è stato creato il codice, il che è fondamentale per le future modifiche e per comprendere i risultati.
Domani non lo so, ormai lo sviluppo dell’IA prosegue talmente velocemente che non so più cosa aspettarmi.
Sono però convinto che deve restare uno strumento a cui far fare il “lavoro sporco” per lasciare a noi il controllo sul risultato e la definizione dei dettagli.
“La potenza è nulla senza controllo” diceva una vecchia pubblicità della Pirelli, ecco, deve essere così per l’IA.
Alla fine la risposta alla domanda: si può usare l’I.A. per creare un videogioco complesso partendo da zero ? La risposta è : non ancora come pensavo ma non siamo troppo lontani ed in ogni caso il supporto fornito è enorme.
Tornando allo sviluppo del gioco, mi sono divertito a creare percorsi sempre più complessi con trabocchetti, mosse segrete e altro che dovrete scoprire per andare avanti. Buon divertimento !
La CHAT con il BOT
Se siete curiosi copio qui sotto parte della discussione con ChatGPT, giusto per farvi un’idea di come sono andate le cose.
Pensa ad un semplice ma originale gioco 2D da realizzare con Unity, non troppo complicato
Un’idea per un semplice ma originale gioco 2D da realizzare con Unity potrebbe essere “Maestro del Vento”.
Descrizione del Gioco:
In “Maestro del Vento”, il giocatore controlla un personaggio che ha il potere di controllare il vento. L’obiettivo del gioco è guidare semi di piante attraverso vari livelli per farli germogliare in luoghi specifici. Il giocatore utilizza il vento per spostare i semi, evitando ostacoli e risolvendo piccoli enigmi ambientali.
Meccaniche di Gioco:
- Controllo del Vento: Il giocatore disegna con il mouse (o tocco su dispositivi mobili) la direzione e l’intensità del vento che influenzerà il movimento dei semi.
- Ostacoli Ambientali: Ci sono ostacoli come rocce, animali o correnti d’aria opposte che il giocatore deve aggirare.
- Elementi Interattivi: Oggetti come ventole, barriere e trampolini che possono essere attivati o disattivati per aiutare il seme a raggiungere la destinazione.
- Sistema di Punteggio: Il giocatore viene premiato in base al tempo impiegato e al numero di venti utilizzati per completare il livello.
Perché è Semplice ma Originale:
- Semplicità Tecnica: Le meccaniche di base possono essere realizzate utilizzando la fisica 2D di Unity, come la simulazione del vento attraverso forze applicate ai semi.
- Grafica Minimalista: Uno stile artistico semplice e pulito riduce il tempo necessario per la creazione delle risorse grafiche.
- Originalità: Combina elementi di puzzle e strategia con un controllo innovativo basato sul disegno del vento, offrendo un’esperienza fresca ai giocatori.
Suggerimenti per lo Sviluppo:
- Tutorial Iniziale: Include livelli introduttivi che insegnano al giocatore come controllare il vento e interagire con gli elementi del gioco.
- Incremento della Difficoltà: Man mano che il gioco procede, introduci nuovi ostacoli ed elementi per mantenere l’interesse del giocatore.
- Musica ed Effetti Sonori: Una colonna sonora rilassante e suoni ambientali possono migliorare l’esperienza di gioco.
Questo gioco offre un buon equilibrio tra semplicità di sviluppo e un’idea originale che può distinguersi. Inoltre, ti permetterà di esplorare diverse funzionalità di Unity come la gestione degli input, la fisica 2D e l’interazione con gli oggetti di gioco.
Forniscimi le istruzioni e il codice per una prima bozza del programma. Ho già installato Unity e creato un nuovo progetto. Sono pronto a partire
Certo! Ti guiderò passo dopo passo nella creazione di una prima bozza di “Maestro del Vento” utilizzando Unity. Questa bozza includerà le meccaniche di base: il controllo del vento e il movimento del seme. Assicurati di avere una versione recente di Unity installata e un nuovo progetto 2D pronto.
Passo 1: Configurazione del Progetto
- Crea un Nuovo Progetto 2D:
- Apri Unity Hub e clicca su “New Project”.
- Seleziona il template “2D”.
- Assegna un nome al progetto, ad esempio “MaestroDelVento”.
- Clicca su “Create”.
- Imposta la Scena Principale:
- Salva la scena corrente andando su File > Save As… e chiamala “MainScene”.
- Crea le seguenti cartelle nella finestra Project per organizzare gli asset:
- Sprites
- Scripts
- Prefabs
- Scenes
Passo 2: Creazione degli Elementi di Gioco
1. Creazione del Seme
- Crea un Seme:
- Vai su GameObject > 2D Object > Sprite > Circle.
- Rinomina l’oggetto in “Seme”.
- Posizionalo al centro della scena (0,0,0).
- Nel componente Sprite Renderer, cambia il colore se desideri differenziarlo.
- Aggiungi Componenti al Seme:
- Con il Seme selezionato, clicca su Add Component e aggiungi:
- Rigidbody 2D: imposta Gravity Scale a 0.
- Circle Collider 2D.
- Con il Seme selezionato, clicca su Add Component e aggiungi:
2. Creazione dell’Obiettivo (Punto di Germinazione)
- Crea l’Obiettivo:
- Vai su GameObject > 2D Object > Sprite > Square.
- Rinomina l’oggetto in “Obiettivo”.
- Posizionalo in un punto della scena che rappresenterà la destinazione.
- Ridimensiona l’oggetto per renderlo distinguibile.
- Aggiungi un Collider all’Obiettivo:
- Aggiungi un Box Collider 2D all’Obiettivo.
- Spunta la casella Is Trigger nel collider.
3. Creazione degli Ostacoli
- Crea un Ostacolo:
- Vai su GameObject > 2D Object > Sprite > Square.
- Rinomina l’oggetto in “Ostacolo”.
- Posizionalo tra il Seme e l’Obiettivo.
- Aggiungi un Box Collider 2D.
Passo 3: Implementazione del Controllo del Vento
1. Creazione dello Script WindController
- Crea lo Script:
- Nella cartella Scripts, clicca con il tasto destro e seleziona Create > C# Script.
- Nomina lo script “WindController”.
- Aggiungi lo Script a un GameObject:
- Crea un nuovo Empty GameObject e chiamalo “WindManager”.
- Trascina lo script WindController su WindManager.
2. Codice dello Script WindController
Apri lo script WindController e inserisci il seguente codice:
using UnityEngine;
public class WindController : MonoBehaviour
{
public float windForce = 5f;
private Rigidbody2D seedRigidbody;
void Start()
{
GameObject seed = GameObject.Find(“Seme”);
if (seed != null)
{
seedRigidbody = seed.GetComponent<Rigidbody2D>();
}
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
ApplyWindForce();
}
}
void ApplyWindForce()
{
Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 direction = (mousePosition – seedRigidbody.position).normalized;
seedRigidbody.AddForce(direction * windForce, ForceMode2D.Impulse);
}
}
Spiegazione del Codice:
- Variabili Pubbliche:
windForce
: determina l’intensità del vento.
- Variabili Private:
seedRigidbody
: riferimento al componente Rigidbody2D del seme.
- Start():
- Trova l’oggetto Seme nella scena e ottiene il suo Rigidbody2D.
- Update():
- Verifica se il tasto sinistro del mouse è stato premuto.
- Chiama la funzione
ApplyWindForce()
.
- ApplyWindForce():
- Converte la posizione del mouse in coordinate del mondo.
- Calcola la direzione dal seme al punto cliccato.
- Applica una forza al seme in quella direzione.
Passo 4: Implementazione della Logica di Vittoria
1. Creazione dello Script Goal
- Crea lo Script:
- Nella cartella Scripts, crea un nuovo script chiamato “Goal”.
- Aggiungi lo Script all’Obiettivo:
- Trascina lo script Goal sull’oggetto “Obiettivo”.
2. Codice dello Script Goal
using UnityEngine;
using UnityEngine.SceneManagement;
public class Goal : MonoBehaviour
{
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.name == "Seme")
{
Debug.Log("Livello completato!");
// Puoi aggiungere qui la logica per caricare il livello successivo
// Ad esempio: SceneManager.LoadScene("ProssimoLivello");
}
}
}
Spiegazione del Codice:
- OnTriggerEnter2D(Collider2D other):
- Viene chiamato quando un oggetto con un Rigidbody2D entra nel trigger dell’obiettivo.
- Verifica se l’oggetto è il Seme.
- Se sì, stampa un messaggio di completamento.
Passo 5: Aggiunta di Feedback Visivo
1. Effetto Particellare per il Vento
- Crea un Particle System:
- Vai su GameObject > Effects > Particle System.
- Rinomina l’oggetto in “WindEffect”.
- Posizionalo come figlio di “WindManager”.
- Configura il Particle System:
- Regola i parametri per simulare il vento (velocità, direzione, durata).
- Controlla l’Emissione delle Particelle nello Script WindController:Modifica lo script WindController per attivare l’effetto quando il vento viene applicato.
// Aggiungi in cima allo script
private ParticleSystem windEffect;
void Start()
{
// Codice esistente...
windEffect = GetComponentInChildren<ParticleSystem>();
}
void ApplyWindForce()
{
// Codice esistente...
if (windEffect != null)
{
windEffect.Play();
}
}
Passo 6: Miglioramenti dell’Interazione
1. Disegnare la Direzione del Vento
- Aggiungi una Linea per Mostrare la Direzione:
- Crea un nuovo script chiamato “WindVisualizer” e aggiungilo a “WindManager”.
- Codice dello Script WindVisualizer:
using UnityEngine;
public class WindVisualizer : MonoBehaviour
{
private LineRenderer lineRenderer;
private Vector2 startMousePosition;
void Start()
{
lineRenderer = gameObject.AddComponent<LineRenderer>();
lineRenderer.startWidth = 0.05f;
lineRenderer.endWidth = 0.05f;
lineRenderer.positionCount = 2;
lineRenderer.enabled = false;
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
startMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
lineRenderer.SetPosition(0, startMousePosition);
lineRenderer.enabled = true;
}
else if (Input.GetMouseButton(0))
{
Vector2 currentMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
lineRenderer.SetPosition(1, currentMousePosition);
}
else if (Input.GetMouseButtonUp(0))
{
lineRenderer.enabled = false;
}
}
}
Spiegazione del Codice:
- LineRenderer:
- Utilizzato per disegnare una linea tra due punti.
- Update():
- Disegna la linea mentre il mouse è premuto.
Passo 7: Aggiunta di Limiti alla Forza del Vento
- Modifica dello Script WindController:Aggiungi una variabile per limitare l’uso del vento.
public float windCooldown = 1f;
private float windTimer = 0f;
void Update()
{
windTimer += Time.deltaTime;
if (Input.GetMouseButtonDown(0) && windTimer >= windCooldown)
{
ApplyWindForce();
windTimer = 0f;
}
}
Spiegazione del Codice:
- windCooldown: tempo di attesa tra un utilizzo del vento e l’altro.
- windTimer: tiene traccia del tempo trascorso dall’ultimo utilizzo.
Passo 8: Aggiunta di Suoni
1. Importazione degli Effetti Sonori
- Importa i Suoni:
- Trascina i file audio nella cartella “Audio” all’interno di Assets.
2. Aggiunta di AudioSource
- Aggiungi un AudioSource a WindManager:
- Con “WindManager” selezionato, clicca su Add Component e aggiungi AudioSource.
- Deseleziona Play On Awake.
3. Modifica dello Script WindController per Riprodurre il Suono
private AudioSource windAudio;
void Start()
{
// Codice esistente...
windAudio = GetComponent<AudioSource>();
}
void ApplyWindForce()
{
// Codice esistente...
if (windAudio != null)
{
windAudio.Play();
}
}
Passo 9: Test e Debug
- Esegui il Gioco:
- Clicca su Play per testare le funzionalità implementate.
- Verifica che il seme si muova correttamente, che gli effetti visivi e sonori funzionino e che la logica di vittoria sia attiva.
- Debugging:
- Utilizza la console di Unity per monitorare eventuali errori o messaggi di log.
Passo 10: Prossimi Passi
- Creazione di Livelli Aggiuntivi:
- Progetta nuovi livelli con ostacoli e sfide crescenti.
- Implementazione di un Sistema di Punteggio:
- Crea una UI per visualizzare il punteggio basato sul tempo o sull’efficienza.
- Miglioramenti Grafici:
- Importa asset grafici personalizzati per migliorare l’aspetto visivo.
- Ottimizzazione del Gameplay:
- Regola i parametri per bilanciare la difficoltà e rendere il gioco più coinvolgente.
Conclusione
Hai ora una prima bozza funzionante di “Maestro del Vento”! Questa base ti permette di espandere il gioco aggiungendo nuove meccaniche, livelli e miglioramenti estetici. Ricorda di salvare frequentemente il tuo lavoro e di sperimentare per trovare il gameplay che più ti soddisfa.
Se incontri difficoltà o hai domande specifiche su qualche passaggio, sono qui per aiutarti. Buon sviluppo!
Da qui in poi ho proceduto a piccoli passi introducendo di volta in volta qualcosa di nuovo. Questa al momento a mio parere è la strategia vincente, mantenere il controllo e la comprensione del codice così da riuscire a correggere il bot laddove commette errori ed eventualmente migliorarlo.
Usare l’I.A. per creare un videogioco – Altri LINK
IL PALIO DI NOALE – Rievocazione storica ed app esclusiva
Un’app contapassi gratis senza sfronzoli : NDEMO10K