corse di auto: confrontiamoci sulla AI del computer

Giochi, Programmi, Estensioni in via di sviluppo con GameMaker. Proposte e idee di design.
TellyAbba
Membro super
Messaggi: 801
Iscritto il: 12/02/2004, 10:05
Uso: GM:Studio 2
Località: Roma
Contatta:

corse di auto: confrontiamoci sulla AI del computer

Messaggio da TellyAbba »

Ieri rispondendo in altro post a Lapo ho immaginato, come progetto sul quale fare esperienza, un giochino di corse di auto (ma con idee diverse che qui non elenco) con la possibilità di giocare sia contro il computer sia contro altro giocatore (uso della stessa tastiera).

Così, ieri ho iniziato a ragionare su uno degli aspetti più importanti (a dire il vero, sicuramente il più importante perché necessario): l'AI del computer in gara.
L'AI dovrebbe gestire:
1) la direzione dell'auto in relazione al percorso ed alla traiettoria più breve
2) la direzione dell'auto in relazione alla presenza di ostacoli sul percorso
3) la direzione dell'auto per riprendere la marcia dopo un urto
4) la direzione dell'auto per ostacolare il passaggio degli avversari

Sono sicuro che molti di voi abbiano già affrontato l'argomento e non so se lo abbiano compiutamente ed efficacemente "risolto". Mi piacerebbe confrontarmi con le vostre idee e con i vostri metodi e quindi di seguito indico le mie, esposte a grandi linee.

A) Il gioco sfrutterebbe comunque un percorso delimitato e chiuso da oggetti utili al rilevamento delle collisioni;
B) l'AI di cui al punto 1) verrebbe gestita utilizzando, per ciascuna auto in gara manovrata dal computer, un oggetto che esegue una path di forma del percorso. Questo oggetto viene preso come punto di destinazione dell'auto (ed è quindi da questa seguito) e nell'eseguire la path verifica di non lasciare indietro la sua auto, in modo da garantire che l'auto possa seguirlo manovrando in conformità della struttura del percorso
C) l'AI di cui al punto 2 verrebbe gestita con un controllo sull'auto, che utilizza due collision_line che partono dagli spigoli anteriori dell'auto e si proiettano in avanti per una lunghezza (proporzionale alla velocità dell'auto?) e nella sua stessa direzione. Con i collision_line verifichiamo se davanti all'auto vi sono ostacoli di vario genere. Lo script verifica costantemente le collisioni sulle due linee. Se vi è collisione solo su una delle due linee vuol dire che la direzione opposta è libera e l'auto scarterà di alcuni gradi in quella direzione. Se entrambi rilevano la collisione le due linee non vengono più proiettate lungo la direzione dell'auto ma leggermente più aperte di 5 gradi (in pratica, inizia a crearsi un cono davanti all'auto) e l'operazione di verifica collisione viene ripetuta. Di nuovo, se solo una delle linee rileva la collisione allora l'auto scarterà nella direzione opposta mentre se entrambe sono ancora in collisione le linee (il cono) si apriranno di altri 5 gradi. E così via; la verifica viene ripetuta ad ogni step e quindi lo scarto di 5 gradi è progressivo.
Andranno comunque gestite le operazioni di cui al punto 1 e punto 2 affinché non si ostacolino e affinché l'auto, dopo aver evitato l'ostacolo, riprenda la corretta direzione nel percorso orientandosi verso l'oggetto che segue la path
D) l'AI di cui al punto 3 dovrebbe essere facile da gestire, perché basterà orientare l'auto verso l'oggetto che esegue la path, e che la sta aspettando
E) l'AI di cui al punto 4 è tutta da immaginare, e credo che qui le soluzioni possono essere tante in relazione al tipo di gioco che si vuole realizzare (in un vero gioco di competizione un'auto da corsa non si mette ad ostacolare le altre.

Aspetto di conoscere le vostre soluzioni.

Ciao
TellyAbba

tellyabba at yahoo.it

Avatar utente
Scario
Moderatore
Messaggi: 2707
Iscritto il: 26/05/2003, 20:29
Specialità: Tergiversare
Uso: GM:Studio 2
Contatta:

Messaggio da Scario »

Purtroppo questo è un aspetto del gameplay di vari giochi che mi ha sempre appassionato di più, ma purtroppo in materia sono ancora un principiante.

Ti suggerisco comunque una soluzione spartana, che avevo utilizzato per un gioco che avrebbe dovuto partecipare a una competizione di qualche tempo fa. Innanzitutto avevo seguito il tutorial di pedra per una semplice IA per un gioco di corse, ossia far puntare tanti vari "checkpoint" alle varie auto, così da non essere legati a un vincolo come una path. Per rendere un'auto più "intelligente" dell'altra, semplicemente avevo creato due tipi di puntatori per le auto: uno per i rettilinei, l'altro per le curve: se la distanza tra un puntatore curva e l'altro era abbastanza grande, l'auto seguiva i puntatori per il rettilineo a velocità sostenuta, altrimenti avrebbe rallentato in prossimità della curva stessa, per poi curvare in prossimità del segnalatore, facendo quindi in modo che tagliasse la curva ( chi più chi meno, in base all'abilità dell'auto ). Come metodo funzionava abbastanza bene, però non riuscii a implementare le collisioni tra una vettura e l'altra rendendo così la vita troppo facile al giocatore, per cui abbandonai il tutto.

So benissimo che era un metodo abbastanza stupido di procedere, ma ai tempi non avevo idee migliori e ho cercato di rimboccarmi lo stesso le maniche e inventarmi qualcosa.
Immagine

Avatar utente
BillyMetAl
Membro super
Messaggi: 721
Iscritto il: 05/01/2008, 18:13
Specialità: Musicista
Località: Catania
Contatta:

Messaggio da BillyMetAl »

io avevo pensato di fare una AI per un remix del gioco di Street Race (per chi lo ricordi era l'esempio nel gm 6.0)

Si chiamava Street Race: Callaghan's Revenge e il giocatore impersonava la polizia, che doveva andare a inseguire la macchina rossa.

Ma la mia AI non funzionò e la macchina rossa andava fuori dalla view, e allora il progetto venne abbandonato.
"Perché non hai bisogno di validazione se sei la tua fonte di gioia."

.Sound Engineer.

Immagine Immagine Immagine Immagine

TellyAbba
Membro super
Messaggi: 801
Iscritto il: 12/02/2004, 10:05
Uso: GM:Studio 2
Località: Roma
Contatta:

Messaggio da TellyAbba »

So benissimo che era un metodo abbastanza stupido di procedere
Nient'affatto, non credo fosse un sistema stupido ma una delle strade possibili. Sarei curioso di vederlo quel gioco, anche per capire, dal punto di vista dell'estetica del movimento delle auto, come risultava.

A mio avviso il sistema dei check point è più macchinoso del sistema della path (qui http://mio.discoremoto.alice.it/regressive , cartella Demo GM editabili, trovate già una prova che ho realizzato poco fa) ma forse ha il vantaggio di poter variare la velocità della vettura, mentre con la path ed il sistema indicato al post precedente devo ancora capire come ottenere (devo variare la speed dell'oggetto che segue la path)

Per BillyMetal: non hai più nulla di quel progetto?
TellyAbba

tellyabba at yahoo.it

Avatar utente
Scario
Moderatore
Messaggi: 2707
Iscritto il: 26/05/2003, 20:29
Specialità: Tergiversare
Uso: GM:Studio 2
Contatta:

Messaggio da Scario »

TellyAbba ha scritto: Nient'affatto, non credo fosse un sistema stupido ma una delle strade possibili. Sarei curioso di vederlo quel gioco, anche per capire, dal punto di vista dell'estetica del movimento delle auto, come risultava.
Do' un'occhiata al mio disco esterno e vedo se ho ancora qualche reperto di quel progetto, nel frattempo guardo il tuo esempio. Comunque l'utilizzo delle path mi da' l'impressione di avere percorsi troppo precalcolati e prevedibili, mentre invece quello dei check point aveva un po' più libertà, risultando però purtroppo più macchinoso.

EDIT: Ho guardato il tuo esempio. Io ho cercato in tutti i modi di creare più path che l'auto potrebbe scegliere di utilizzare, perchè il tempo stringeva e non potevo mettermi a disegnare troppi percorsi da seguire. Per la rotazione dello sprite dell'auto abbiamo usato invece codici simili da quel che ricordo, solo che usavo ancora GM 5.0 e image_angle non esisteva ancora.
Immagine

Avatar utente
BillyMetAl
Membro super
Messaggi: 721
Iscritto il: 05/01/2008, 18:13
Specialità: Musicista
Località: Catania
Contatta:

Messaggio da BillyMetAl »

TellyAbba ha scritto: Per BillyMetal: non hai più nulla di quel progetto?
Purtroppo no, ma ho usato un pezzo di codice per creare una AI da platform.
Purtroppo non la hosterò in quanto ha richiesto settimane di lavoro e ha delle molte variabili di controllo che impediscono di far capire a chi non l'abbia creata come funzioni.
"Perché non hai bisogno di validazione se sei la tua fonte di gioia."

.Sound Engineer.

Immagine Immagine Immagine Immagine

Avatar utente
dave_djtam
GMI Advanced
Messaggi: 1604
Iscritto il: 02/07/2007, 21:32
Contatta:

Messaggio da dave_djtam »

io come scario, ho utilizzato un sistema di "checkpoint"...semplice e facile da usare.....difatti non mi è ben chiaro il tuo sistema di path.......cioè cè un obj invisibile che segue la path,e l'auto segue l'obj giusto???? e poi fai fermare l'obj invisibile se la distanza dall'auto è troppa????
se ho capito giusto, è meglio del mio sistema checkpoint, perchè a pensarla cosi su due piedi mi sembra molto + preciso essendo un check in movimento,e non statico; non ci avrei mai pensato........molto probabilmente ti freghero' l'idea :D

io ero(sono) bloccato ad un altro punto cruciale del gameplay........far sgommare in modo decente l'auto.....dopo mille e mille tentativi forse ho trovato un metodo(a mente) ma devo ancora testarlo....caro telly hai idee al riguardo oppure ti basta premere left/right e far girare l'auto di conseguenza???
Immagine
Miglior colonna sonora / Miglior utilizzo di particles
Echos
Listen to me
ScreenSaver Full V3

SublimatedDreams
Membro super
Messaggi: 729
Iscritto il: 07/01/2008, 15:48
Uso: GM:Studio 2
Località: Casalecchio di Reno (BO)
Contatta:

Messaggio da SublimatedDreams »

il "trucco" del percorso preconfezionato invisibile è usato, come anche quello dei "punti nodo" =]
Giochi:
...quasi completi: AoSiX, DraxOut, HamRun, Quantix
...in standby: Micro4WD, HitXar
GMI2008 - Quantix Immagine (miglior engine)

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Messaggio da civic71 »

Nel mio vecchio CIVIC Racing ho utilizzato delle path (diverse per ogni auto e per ogni gara) alle quali avevo aggiunto un object traguardo che con lo sprite copriva la pista . Quando le auto collidevano con questo alcune variabili cambiavano.
Mentre la velocità delle auto variava con un semplice alarm : minima_speed+random(n° ) ;
Il risultato era che si le auto avevano delle traiettori predefinite ma il variare della loro velocità ne determinava l' ostruzione verso l'auto del giocatore.

Lapo
GMI VIP
Messaggi: 3949
Iscritto il: 27/07/2005, 8:25
Uso: GM:Studio 2
Contatta:

Messaggio da Lapo »

Telly, internet è vasto, troverai un sacco di tutorial fatti bene che descrivono perfettamente come fare un AI seria (che non si basi su delle path predefinite... :lol: ).
Gamedev.net è un punto di partenza, ma basta anche Google...
BillyMetAl ha scritto:
TellyAbba ha scritto: Per BillyMetal: non hai più nulla di quel progetto?
Purtroppo no, ma ho usato un pezzo di codice per creare una AI da platform.
Purtroppo non la hosterò in quanto ha richiesto settimane di lavoro e ha delle molte variabili di controllo che impediscono di far capire a chi non l'abbia creata come funzioni.
Usate "purtroppo" in modo strano voialtri (Scario... :lol: ). :roll:
Sopratutto lo usate per cose in cui la sfortuna non c'entra niente, d'altronde, quando mai c'entra? :roll:

Del tipo "io non lo posto, purtroppo", ma purtroppo cosa? Purtroppo dove??? :lol:

Avatar utente
Scario
Moderatore
Messaggi: 2707
Iscritto il: 26/05/2003, 20:29
Specialità: Tergiversare
Uso: GM:Studio 2
Contatta:

Messaggio da Scario »

Lapo ha scritto: Usate "purtroppo" in modo strano voialtri (Scario... :lol: ). :roll:
Ti giuro che non ci avevo fatto minimamente caso purtroppo :lol: :lol:
Immagine

TellyAbba
Membro super
Messaggi: 801
Iscritto il: 12/02/2004, 10:05
Uso: GM:Studio 2
Località: Roma
Contatta:

Messaggio da TellyAbba »

Bello, vedo che la discussione si anima di contributi interessanti e quindi ringrazio tutti per gli spunti e le idee sicuramente istruttive.
Non so bene se andrò avanti con l'idea, perché personalmente le corse di auto non mi entusiasmano particolarmente e perché non vorrei distogliere tempo ad altri progetti.
Probabilmente realizzerò una prova molto rozza per vedere quale soluzione può risultare migliore.
Sabato ho fatto alcune prove modificando la speed della path seguita dall'oggetto invisibile che viene preso a riferimento dall'auto. Se si modifica la speed fra un intervallo (punto) della path e l'altro, è possibile dare maggior realismo al movimento dell'auto, soprattutto nelle curve, dove il rallentamento si impone, e nei rettilinei, l'accelerazione.
Stavo anche pensando di utilizzare un sistema misto waypoint e path, per aggiungere realismo.
Come qualcuno di voi ha evidenziato, il problema della sbandata resta, per il momento, uno dei più difficili da risolvere, soprattutto perché nell'idea che vi ho esposto se l'auto segue la direzione dell'oggetto che esegue la path allora è difficile fargli cambiare angolo o traiettoria, essendo vincolata dal codice nello script.
Così, sto provando ad utilizzare la frizione (friction) ma è difficile bilanciarla bene (al momento sono solo riuscito ad ottenere che in curva l'auto sbanda troppo e se il percorso è stretto collide con il bordo pista).
Appena riesco farò un giro nella rete seguendo il suggerimento di Lapo, per capire meglio quali altre idee si possono applicare.
Chissà che non ne venga fuori un engine....
Se avete altre riflessioni postate; io vi terrò aggiornati sulle mie prove

A presto
TellyAbba

tellyabba at yahoo.it

Lapo
GMI VIP
Messaggi: 3949
Iscritto il: 27/07/2005, 8:25
Uso: GM:Studio 2
Contatta:

Messaggio da Lapo »


bricky91
Membro super
Messaggi: 688
Iscritto il: 20/10/2006, 16:32
Uso: GM:Studio 2
Località: berbenno di valtellina
Contatta:

Messaggio da bricky91 »

una volta einstein disse:"potremmo toccare le stelle, se solo nn avessero tutte quelle guaardie del corpo..."
Immagine

TellyAbba
Membro super
Messaggi: 801
Iscritto il: 12/02/2004, 10:05
Uso: GM:Studio 2
Località: Roma
Contatta:

Messaggio da TellyAbba »

Fighissimmo il documento di cui al link! Peccato sia in inglese ed io non me la cavo molto bene, ma sarà l'occasione per rimpolparsi un po' la lingua.
Thanks (caspita, sto già tornando in forma!)
TellyAbba

tellyabba at yahoo.it

Lapo
GMI VIP
Messaggi: 3949
Iscritto il: 27/07/2005, 8:25
Uso: GM:Studio 2
Contatta:

Messaggio da Lapo »

TellyAbba ha scritto:Fighissimmo il documento di cui al link! Peccato sia in inglese ed io non me la cavo molto bene, ma sarà l'occasione per rimpolparsi un po' la lingua.
Thanks (caspita, sto già tornando in forma!)
E' solo il primo che ho trovato... :lol:

Comunque, capire l'inglese del manuale di game maker o di uno scritto così è relativamente molto facile.

TellyAbba
Membro super
Messaggi: 801
Iscritto il: 12/02/2004, 10:05
Uso: GM:Studio 2
Località: Roma
Contatta:

Messaggio da TellyAbba »

Zuzzerellando ho trovato questo. Credo sia molto interessante per tutti gli appassionati di corse d'auto

http://gmc.yoyogames.com/index.php?showtopic=318371
TellyAbba

tellyabba at yahoo.it

Lapo
GMI VIP
Messaggi: 3949
Iscritto il: 27/07/2005, 8:25
Uso: GM:Studio 2
Contatta:

Messaggio da Lapo »

TellyAbba ha scritto:Zuzzerellando ho trovato questo. Credo sia molto interessante per tutti gli appassionati di corse d'auto

http://gmc.yoyogames.com/index.php?showtopic=318371
Gamedev.net Telly, Gamedev.net. ;)

Lapo
GMI VIP
Messaggi: 3949
Iscritto il: 27/07/2005, 8:25
Uso: GM:Studio 2
Contatta:

Messaggio da Lapo »

Lapo ha scritto:
TellyAbba ha scritto:Zuzzerellando ho trovato questo. Credo sia molto interessante per tutti gli appassionati di corse d'auto

http://gmc.yoyogames.com/index.php?showtopic=318371
Gamedev.net Telly, Gamedev.net. ;)
Ho dato ora un'occhiata al "codice", come volevasi dimostrare è un pò una porcata:

Codice: Seleziona tutto

direction+=speed*1.5 //turn the car left
Non aggiungo altro... :?

Per essere un AI è un pò troppo hard-coded, è più un AHIII, un pò come il raglio di un asino. ;)

Avatar utente
z4g0
Membro
Messaggi: 243
Iscritto il: 16/06/2003, 20:01
Uso: GM:Studio 2
Località: Bologna
Contatta:

Messaggio da z4g0 »

qui: http://www.gameprog.it/?resource=313 c'è un mio tutorial di 6 anni fa (ci ho messo quasi altrettanto a ritrovarlo nei meandri di GPI XD) circa un sistema 'artigianale' per simulare la schivata di ostacoli

purtroppo era una conversione in Div Games Studio di un engine che feci su Klik&Play (per questo si basa molto su 'oggetti' grafici e poco su quelli matematici)... in GM, comunque, secondo lo stesso principio dovrebbe essere possibile riscriverlo senza utilizzare troppi oggetti ausiliari...
ImmagineImmagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 81 ospiti