Esistono algoritmi di pathfinding in grado di gestire diversi tipi di movimento?


12

Sto sviluppando un bot per un simulatore di giochi da tavolo BattleTech http://en.wikipedia.org/wiki/BattleTech , è a turni.

Il tabellone è diviso in esagoni, ognuno con un diverso tipo di terreno ed elevazione. Guidi un robot che si sposta su di loro per distruggere altri robot.

Conosco solo algoritmi Dijkstra e A *, ma il problema è che ci sono 3 tipi di movimenti: camminare, correre e saltare diversi esagoni (ognuno ha le proprie regole). Camminare e correre sono quasi uguali.

Il percorso migliore potrebbe essere una combinazione o ciascun tipo di movimento. Ecco un esempio di mappa http://megamek.info/sites/default/files/isometric_view.png

Conosci un buon algoritmo per questo complesso pathfinding o un modo per combinare i risultati A * per ogni tipo di movimento?


Penso che questo sia spesso gestito da una manipolazione intelligente di un percorso ponderato con A * (il peso è il costo di quel percorso / quadrato). Ad esempio, se è preferibile saltare, ottiene un peso inferiore (ad es. 5) rispetto alla camminata (ad es. 10).
ashes999,

In che modo differiscono esattamente i tre tipi di movimento? Possono essere combinati (cammina verso la tessera A, poi corri verso B e poi salta su C nello stesso turno)? In caso affermativo, quali sono le regole che impediscono al giocatore di usare sempre il metodo più economico per passare dalla tessera A alla tessera B?
Philipp,

@Philipp Sì, possono essere, quando si utilizza A *. Puoi aggiungere tutte le tessere su cui puoi spostarti con ogni tipo di movimento alla lista aperta, quindi in base al prezzo di ciascuna + una buona euristica puoi determinare quale avanzare ulteriormente.
Akaltar,

@Philipp No, puoi usare solo un tipo di mossa per turno.
alexvisio,

Camminata: muoviti attraverso gli esagoni con poca differenza di elevazione. Corri: lo stesso ma puoi andare lontano, anche se genererai calore e perderai la precisione di tiro (quindi non è sempre il migliore). Salta: puoi saltare ostacoli (un muro o un fiume) invece che attorno a loro camminando.
alexvisio,

Risposte:


10

Sia Dijkstra che A * possono aggiungere costi diversi ai bordi (= connessioni) da una piastrella all'altra. Consentono inoltre di collegare due nodi (= riquadri) con più di un bordo, ognuno con un costo diverso.

La modalità di salto alternativa significherebbe che esiste un bordo diretto alternativo da ciascuna tessera a ciascuna tessera nella distanza di salto. Ma poiché un mech può camminare o saltare in un turno, il costo per usare questo vantaggio sarebbe rappresentato dai punti di movimento di un turno intero, più i punti rimanenti del turno corrente quando c'era già un movimento in questo turno.

Secondo la tua descrizione, la decisione di camminare contro la corsa non fa molta differenza per quanto riguarda la scelta del percorso, ma sembra piuttosto una decisione strategica da prendere. L'attore può sicuramente camminare quando è possibile raggiungere la destinazione nel turno in corso senza ricorrere alla corsa. Ma per il resto ci sono molti fattori da considerare, come:

  • livello di calore attuale e probabilità di essere coinvolti in combattimenti prima di riuscire a rinfrescarsi
  • difficoltà di colpi che devono essere sparati in questo round
  • quanto sia strategicamente importante raggiungere rapidamente la destinazione

Non esiste una regola rigida per prendere questa decisione. Il meglio che puoi fare è usare un approccio euristico. Assegna valori di punti positivi o negativi a tutte le circostanze, sommali e verifica se il risultato è positivo o negativo.

C'è anche un altro fattore nel pathfinding di cui dovresti tenere conto: in alcune condizioni potrebbe avere senso per un mech evitare di terminare il suo turno in determinate posizioni. Quando ci si trova in un'area pericolosa, usare tre turni per passare da A a B ma terminare ognuno in copertura potrebbe essere meglio che usarne solo due, ma essere esposti alla fine di ciascuno. O forse no. Dipende dalle circostanze e dalle esatte meccaniche di gioco. Questa, ancora una volta, è una decisione strategica che devi prendere in base all'euristica. Puoi rappresentarlo aggiungendo un costo aggiuntivo ai bordi che terminano il turno su una tessera pericolosa per scoraggiare l'IA dal fare questa mossa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.