Videogames e intelligenza artificiale Di Stefano Tamascelli Attualmente, quando si osserva un moderno videogioco, si viene colpiti dalla grafica incredibile, quasi reale, dal sonoro coinvolgente e dall'atmosfera "magica" che esso riproduce; ma questo basta per creare un gioco che sia anche divertente ed accattivante? Una delle caratteristiche fondamentali presenti in un prodotto ludico è il "comportamento" dei personaggi virtuali automatizzati, ossia controllati dal computer. Il loro "atteggiamento" influenza in modo notevole la giocabilità: avversari troppo stupidi rendono la sfida troppo semplice e noiosa, al contrario, avversari troppo intelligenti la possono rendere impossibile e nevrotica. Questo "dettaglio", molte volte troppo trascurato dalle software house, può pregiudicare un ottimo prodotto, rendendolo poco appetibile al pubblico e, fatto non trascurabile, avaro di soddisfazioni e soprattutto di vendite. Com'è facile intuire, per realizzare un videogioco moderno, non servono solamente grafica sbalorditiva e sonoro in dolby sorround, è necessario ricreare, virtualmente, le condizioni per le quali il giocatore sia totalmente immerso nel "mondo" creato per lui dal programma. Il modo in cui, un oggetto virtuale interagisce e/o risponde allo stimolo indotto da altri oggetti virtuali presenti nel suo universo digitale viene definito, in modo più o meno lecito, intelligenza artificiale. Il livello di complessità degli algoritmi utilizzati per simulare il comportamento dipende molto dalla tipologia di gioco e di pseudo-realismo che si vuole ottenere. In alcuni prodotti la codifica dell'intelligenza artificiale si riduce a poche linee di codice, in altri invece, sono necessari molti mesi di attenta progettazione. Come spesso accade, in particolare quando si prendono in esame prodotti che necessitano di brevi tempi di calcolo come i videogame, si usano algoritmi semplici e non computazionalmente complessi, che danno "l'illusione" di metodi raffinati, fondamentale è il risultato che deve essere raggiunto: realizzare oggetti con "comportamenti" ragionevoli e coerenti all'interno dell'universo creato. Un sistema estremamente utile per realizzare un primitivo sistema di "intelligenza" è il calcolo della distanza tra due oggetti virtuali. Prendiamo, per puro esempio, la simulazione di una sentinella; la sua aggressività può aumentare con l'avvicinarsi di un personaggio. Per rendere maggiormente realistico il suo comportamento si può controllare se il personaggio è all'interno dell'area visiva della sentinella, aggiungendo un vettore che indichi la direzione dello sguardo. In alcuni casi è molto utile inserire delle "aree di attivazione", ossia zone nelle quali l'oggetto virtuale si comporta in un modo piuttosto che in un altro, con questo sistema si possono simulare allarmi, mine, ecc. Con l'uso di questi due semplici metodi è possibile realizzare comportamenti pseudo-realistici, è doveroso specificare che la semplicità di questi sistemi è legata all'ambiente virtuale sui quali vengono usati. Calcolare se un personaggio virtuale "vede" un oggetto all'interno di una stanza vuota è molto più semplice che calcolarlo all'interno di una stanza piena di oggetti. L'uso di tabelle di movimenti è una tecnica usata principalmente nei videogame di alcuni decenni or sono. E' molto semplice da realizzare, non necessita di calcoli matematici ed è ragionevolmente realistica. Ovviamente il difetto maggiore è la non elasticità di questo sistema. Nonostante questo tipo di tecnica sia antiquata è possibile utilizzarla in modo proficuo: realizzando tabelle di movimenti da utilizzare solo in alcuni casi particolari, evitando accuratamente di inserire valori assoluti ma solamente dei delta di posizione. In questo modo è possibile creare dei percorsi che possono essere compiuti dal nostro oggetto, consentendogli di poterli variare cambiando tipo di tabella. In questo caso è utile avere un buon numero di tabelle differenti, selezionabili in base a determinati eventi. Inseguimento e fuga Un altro ottimo sistema per simulare comportamenti di oggetti virtuali all'interno di un videogame consiste nell'utilizzare algoritmi di inseguimento, in particolare se si intendono realizzare prodotti di tipo arcade, come gli sparatutto. Creare un oggetto che insegue un altro è facile: aventi le coordinate spaziali di entrambi, si muove l'inseguitore verso la direzione dell'inseguito. Questo metodo è molto semplice ma riduttivo, si ipotizza che ci si trovi in ambienti privi di ostacoli, nonostante ciò è molto utile per realizzare kamikaze o missili a ricerca. Un altro metodo applicabile consiste nel tracciare tutti i movimenti dell'inseguito e farli ripercorrere dall'inseguitore, in questo modo si evita il problema riscontrato nel sistema precedente: è possibile utilizzarlo in ambienti non vuoti. Prendiamo ora in esame il sistema che si contrappone all'inseguimento: la fuga. Se l'ambiente virtuale in cui deve essere eseguito è privo di ostacoli, allora non si deve fare altro che eseguire il movimento opposto dell'inseguitore. In ambienti con ostacoli l'algoritmo diventa più complesso, solitamente si indica all'oggetto che deve fuggire una "via di fuga". Tutte le tecniche per simulare intelligenza da parte di oggetti virtuali esaminate sino ad ora sono interessanti, utili e non sono complicatissime da realizzare, hanno un notevole difetto: non possono essere utilizzate per la creazione di intelligenza complessa, questo è dovuto al fatto che ogni algoritmo simula un solo comportamento. Per ovviare a ciò è possibile utilizzare delle macchine a stati finiti, ossia una macchina simulata per mezzo di software in grado di modificare il proprio stato in risposta ad eventi. Prendiamo in esame gli algoritmi di distanza, aree di attivazione, inseguimento, fuga e tabelle, se vogliamo simulare una sentinella possiamo creare una serie di eventi che determinano il metodo usato per il suo comportamento Copyright Ing. Stefano Tamascelli - www.xteamsoftware.com