Le griglie quadrate o esagonali sono migliori per l'individuazione del percorso?


17

C'è qualche differenza significativa tra l'uso di una griglia quadrata o esagonale per l'area cercata da un algoritmo di ricerca del percorso. In altre parole, è meglio quadrato o esagonale, e se sì perché.


4
Penso che dovresti usare qualunque cosa si adatti al tuo gameplay;)
Andrew Russell,

Risposte:


19

La considerazione principale per decidere se utilizzare griglie quadrate o esadecimali non dovrebbe essere la facilità di implementazione dell'IA: gli algoritmi di ricerca breadth-first e depth-first sono praticamente gli stessi, indipendentemente dal tipo di grafico che hai.

Piuttosto, questo è un problema di gioco che dovrebbe essere considerato dai progettisti del gioco. Le griglie quadrate sono più accessibili al mercato di massa (le schede esadecimali tendono a sembrare "geek"), e in un mondo di controlli su / giù / sinistra / destra è molto più intuitivo navigare attorno ai quadrati rispetto agli esagoni dal punto di vista dell'interfaccia utente. Le griglie quadrate tendono anche a limitare un po 'di più il movimento; supponendo un movimento ortogonale (e non diagonale), sono necessarie 4 mosse per aggirare un ostacolo di un quadrato, rispetto a 3 mosse in una griglia esagonale. Dal punto di vista della programmazione, gli esagoni sono anche un po 'più facili da implementare, ma non si tratta di algoritmi di ricerca tanto quanto una griglia quadrata equivale a un array bidimensionale, ma una griglia esadecimale non si associa realmente a una struttura di dati standard.

Il lato negativo delle griglie quadrate è che il movimento non sembra mai giusto. Lo spostamento in diagonale dovrebbe richiedere punti di movimento sqrt (2), ma in pratica è o 1 movimento (che fa sembrare che camminare sulle diagonali sia veloce e raramente c'è un motivo per camminare ortogonalmente) o è 2 movimento (che rende il movimento diagonale troppo lento ). Con le griglie esadecimali, la distanza di movimento è molto più intuitiva, poiché è sempre la stessa distanza da un esagono all'altro, indipendentemente dal percorso che si prende.


4
+1. Questa è una decisione di progettazione, non una decisione AI. Se vuoi griglie esagonali, una griglia quadrata offset come www-cs-students.stanford.edu/~amitp/game-programming/grids/… può essere meno intimidatoria per i giocatori occasionali, ed è matematicamente equivalente agli esagoni. Inoltre, è anche una comoda rappresentazione in memoria.

2
+1 per la frase "Le griglie quadrate sono più accessibili al mercato di massa (le schede esadecimali tendono ad apparire" geek ")": D
Kornel Kisielewicz,

Edwin non sta chiedendo cosa c'è di meglio in un gioco basato sulla griglia. Sta chiedendo cosa è meglio che l'IA usi quadrati o esagoni. Il mondo e il gameplay stesso non devono essere limitati a quelli, ma solo ai nodi su cui l'IA sta cercando.
Attaccando

Ho implementato giochi di strategia a turni con entrambe le griglie esadecimali e quadrate, e non c'è assolutamente alcuna differenza necessaria in termini di complessità di rilevamento dei percorsi. Ho anche passato un gioco da una mappa esadecimale a una mappa quadrata e (a parte il rendering) l'unica modifica che ho dovuto fare è stata un metodo MapLocation :: GetDistance () che ha calcolato la distanza tra due settori. Ho semplicemente dovuto adattare i calcoli per compensare ogni altra riga leggermente compensata. In entrambi i casi, è possibile utilizzare la stessa rappresentazione in memoria. Quindi, come hanno detto gli altri, è davvero un problema di design.
Mike Strobel,

4
Solo a parte, gli esagoni possono essere mappati su un array bidimensionale. Immagina una griglia quadrata, quindi sposta ogni colonna pari di mezzo passo verso il basso. Ora hai una griglia quadrata offset, che è isomorfa a una griglia esadecimale.
Asmor,

3

Non sono affatto un esperto di intelligenza artificiale, ma la differenza dovrebbe essere trascurabile. Le griglie quadrate sono un po 'più veloci (4 connessioni per nodo anziché 6), ma in realtà questo non è il fattore limitante nel runtime algoritmico. A seconda dell'algoritmo che intendi utilizzare, il codice potrebbe essere un po 'più complesso per una griglia esadecimale, poiché è un po' più complicato calcolare le coordinate ed è più difficile utilizzare il tipo di scorciatoie quadtree / octree che credo siano spesso usato nella ricerca di percorsi.

Ma per un mondo semplice come un livello di gioco basato su turni, la differenza tra i due layout non dovrebbe importare molto; una griglia quadrata sarà leggermente più semplice e veloce.


5
"Le griglie quadrate sono un po 'più veloci (4 connessioni per nodo anziché 6)" - a meno che non si possa viaggiare lungo le diagonali, nel qual caso sono 8 connessioni contro 6.
Ian Schreiber

Touche. Hai perfettamente ragione; ovviamente le connessioni diagonali sarebbero probabili.
Gregory Avery-Weir,

3

C'è una differenza pratica che posso pensare riguardo alla pianificazione del percorso. Il passaggio dal centro di una cella esadecimale a uno dei suoi vicini è sempre alla stessa distanza mentre, se si consente il viaggio in diagonale, questo non è vero per i quadrati.


0

Questa guida sugli esagoni è fantastica. La parte sul pathfinding ha un esempio interattivo e alcune informazioni su come adattare il path tracking.

Se si utilizza il path -inding basato su grafici come A * o l'algoritmo di Dijkstra o Floyd-Warshall, il path-tracking su griglie esadecimali non è diverso dal path-grinding su griglie quadrate.

  • Vicinato. Il codice di esempio che fornisco nel tutorial di pathfinding chiama graph.neighbors per ottenere i vicini di una posizione. Utilizzare la funzione nella sezione vicini per questo. Filtra i vicini impraticabili.
  • Euristico. Il codice di esempio per A * utilizza una funzione euristica che fornisce una distanza tra due posizioni. Utilizzare la formula della distanza, ridimensionata in base ai costi di movimento. Ad esempio, se il costo del tuo movimento è 5 per esagono, moltiplica la distanza per 5.
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.