|
|
||||||||||||||||||||||||||
Introduzione 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. Non essendo un articolo di carattere tecnico ma solamente introduttivo non verranno trattati algoritmi complessi, si tenterà di illustrare i metodi e le tecniche maggiormente usate. Distanza tra oggetti ed aree di
attivazione 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. Tabelle di movimenti 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 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". Menzione a parte merita il sistema per uscire da un labirinto; nonostante possa sembrare un metodo poco utile nello sviluppo di un videogame, esso propone alcune caratteristiche interessanti. Se consideriamo l'algoritmo come:
si può notare come sia possibile modificarlo per creare sistemi di inseguimento e di fuga migliori di quelli precedentemente presi in esame, è sufficiente cercare di trovare un punto specifico, solitamente un avversario o una via dell'uscita e il gioco è fatto. Ovviamente la complessità dell'algoritmo è abbastanza elevata ed è necessario tenere presenti alcune cose: vedere delle creature che "strisciano" attaccate a dei muri non è molto realistico, la direzione della creatura deve cambiare in base alla posizione del punto che si intende trovare, si deve integrare l'algoritmo di ricerca con altri sistemi maggiormente performanti da utilizzare nei momenti più opportuni. Sarà lo sviluppatore, considerando il livello di realismo e la complessità di realizzo, a decidere quali sistemi adottare, la cosa fondamentale è il risultato che si ottiene. Macchine 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:
Com'è possibile osservare, il solo utilizzo di una macchina a stati e di alcuni semplici algoritmi, hanno permesso una buona simulazione di una creatura. Ovviamente, maggiore è il numero di eventi che si possono verificare, maggiore è il realismo prodotto. Probabilità Nonostante le premesse poco rassicuranti, mediante l'uso di sistemi basati sulla probabilità e sul caso, è possibile ricreare situazioni comportamentali abbastanza realistiche. Ciò si verifica creando sistemi di scelta pilotati, impostando eventi con probabilità maggiore rispetto ad altri. Per esempio, considerando la simulazione di una sentinella, possiamo impostare l'algoritmo come:
Per scegliere il comportamento da adottare basta calcolare un valore casuale tra 1 e 100 e controllare a quale tipo di "probabilità" appartiene, quindi si imposta l'algoritmo o gli algoritmi relativi all'azione da compiere. Sistemi
Euristici In generale si crea una funzione che valuti la situazione corrente, si modifica la situazione, si valuta la modifica apportata, se porta ad un miglioramento si continua con la tattica presa in esame altrimenti se ne cerca un'altra. Al termine si eseguirà la modifica che ha portato i miglioramenti più evidenti o che li recherà nel proseguito della partita virtuale. Il modello di valutazione che viene sviluppato attribuisce agli oggetti valori definiti dalla programmatore, questi valori non sempre sono assoluti ma spesso derivano dall'esperienza che lo sviluppatore ha accumulato, ovviamente questo porta alla realizzazione di sistemi che non sempre sono precisi ed affidabili. Conclusione Copyright © 2000
Ing. Stefano Tamascelli |
|
|
Prometheo Srl - Gli articoli sono Copyright © 1999 - 2020 dei rispettivi Autori, pubblicati sul sito web Prometheo per gentile concessione degli Autori |
Copyright © 1999 - 2020 Prometheo Srl - Per informazioni: info@prometheo.it (Informativa Privacy) - Telefono: 081.562.72.21 |
I prodotti citati sono marchi e marchi registrati dei relativi produttori. Ultimo Aggiornamento: 23/06/14. |
|