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é.
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é.
Risposte:
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.
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.
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.