IA che riconosce gli ambienti

Algoritmi, discussioni sulle possibili implementazioni, matematica, fisica e tutti gli argomenti correlati alla programmazione
Rispondi
Avatar utente
cp94
Moderatore
Messaggi: 2789
Iscritto il: 04/07/2009, 19:18
Specialità: ddd
Località: Brescia
Contatta:

IA che riconosce gli ambienti

Messaggio da cp94 »

Ciao a tutti, ho un problema per quanto riguarda la creazione di un IA e dei suoi comportamenti.
Ciò che voglio realizzare è la costruzione di un particolare della mia IA, ovvero il riconoscimento dell'ambiente.
Praticamente io ho questo bot che sta all'interno di un edificio (2d) di cui io non posso in alcun modo prevedere ne forme ne disposizione di oggetti (quindi niente metodi a waypoints)
Il problema è che il bot deve saper riconoscere gli spazi intorno ad un oggetto di interesse, e non sto parlando di pathfinding.
Per esempio se il bot vuole guardare la tv o vuole ballare davanti ad uno stereo ma lo spazio è occupato, non lo farà. Il punto sta nel calcolare questo spazio.
Secondo voi qual'è il metodo migliore per implementare ciò?
Dite che è meglio andare di collision checking o fare un riconoscimento di qualche altro tipo?

:cappa:
Games you should check out
Naemo
E T U S
Overgravity
Inside the Code

Immagine

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: IA che riconosce gli ambienti

Messaggio da Solid Snake »

Praticamente stai facendo un The Sims :asd:

Comunque per il tuo problema, che non puoi prevedere la disposizione deglio oggetti va bene, ma non hai modo di ricavarla? E se per interagire con l'oggetto prima fai un check sulla posizione? Mi spiego meglio:
Suppongo che stai ancora utilizzando Unity:
Classe Bot:

Codice: Seleziona tutto

//Pseudo codice
[...]

private void usa_oggetto(Oggetto obj[...])
{
    posX=obj.usePosX.x;
    posY=obj.usePosY.y;

    if (posizione_libera(posX, posY))
    {
         utilizza_oggetto(obj);
    }
    else
    {
        //Oggetto occupato
    }
}

[...]
Classe Oggetto:

Codice: Seleziona tutto

//Pseudo codice
[...]
public float usePosX=x+10//Esempio...
public float usePosY=y+10
[...]
Il tutto puo' essere adattato anche ad un griglia se necessario... :asd:
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
cp94
Moderatore
Messaggi: 2789
Iscritto il: 04/07/2009, 19:18
Specialità: ddd
Località: Brescia
Contatta:

Re: IA che riconosce gli ambienti

Messaggio da cp94 »

Siccome le IA si devono disporre un un punto qualsiasi davanti all'oggetto interessato avevo pensato ad una cosa tipo:
1. controllo se l'oggetto è raggiungibile
2. se lo è, mando dei raggi di lunghezza definita dall'oggetto in tutte le direzioni, rilevando gli ostacoli intorno
3. l' IA andrà in un punto libero qualsiasi di questi raggi

Se c'è qualcuno che ha qualche altra idea che non sia quella di testare tutte le collisioni, o un metodo più efficiente, si faccia avanti :lol:
Games you should check out
Naemo
E T U S
Overgravity
Inside the Code

Immagine

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: IA che riconosce gli ambienti

Messaggio da Jak »

Vorresti testare le collisioni... senza testare le collisioni?
Il metodo efficiente è quello che ha detto snake, fatti una griglia così ti basta vedere le poche celle disponibili intorno agli elementi interessati.
Se hai ambienti enormi puoi anche fare griglie o liste di elementi presenti nelle vicinanze di ogni elemento specifico e dopo fare un paio di if. E' estremamente facile ottenere un costo quasi nullo, sopratutto se non devi farlo ogni frame per millemila oggetti.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: IA che riconosce gli ambienti

Messaggio da Tizzio »

The sims usa una griglia

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti