Sembra che tu abbia già risposto alla tua domanda. A * è probabilmente l'approccio migliore. Sì, certo, può essere usato nel modo in cui descrivi, incluso l'uso delle informazioni sull'altezza per evitare le montagne. Finché sei in grado di accedere alle informazioni su qualsiasi griglia sulla superficie del tuo mondo, non c'è motivo per cui non puoi usarlo nell'euristica A *.
Infine, stai confondendo la ricerca del percorso con il percorso che segue alla fine della domanda. La ricerca del percorso non si preoccupa della gravità, a meno che non venga aggiunta come euristica e poiché si è sulla superficie di un pianeta, la gravità sarà essenzialmente la stessa su tutta la superficie. Molti giochi hanno gravità insieme al movimento, non vedo alcun motivo per cui non puoi.
Fondamentalmente vogliamo mappare andando dal rosso al blu, per essere lo stesso su una sfera come su un cubo.
Poiché A * sta spesso avvicinando i vicini al nodo corrente, è possibile creare facilmente una serie di funzioni per ottenere nodi adiacenti. Ad esempio, getXPlus()
, getXMinus()
, getZPlus()
e così via. Queste funzioni prenderanno il nodo corrente e restituiranno il nodo nella direzione specificata dal nome della funzione.
Il più delle volte queste funzioni possono semplicemente incrementare un valore ed essere eseguite, tuttavia, sui bordi, che cambieranno.
Ti consigliamo di mappare la superficie del cubo su un sistema di coordinate 2D. Comunque tu faccia questo, non devi allinearti, basta dare ad ogni spazio della griglia una coordinata X, Y unica.
Ora, quando si è su un bordo, e ottenendo lo spazio griglia adiacente, non sarà necessariamente solo incrementare le coordinate. Dobbiamo scoprire su quale faccia ci stiamo spostando e passare alle coordinate di quella faccia.
Ad esempio, ottenere le coordinate XPlus qui cambierà sia le coordinate X che Y perché ci stiamo spostando su un nuovo spazio griglia su una nuova faccia. La linea verde rappresenta un bordo tra due facce.
Ora si tratta solo di coordinate globali, potrebbe essere più semplice utilizzare un sistema di coordinate locale interno, con una terza dimensione che rappresenta la faccia del cubo in cui ci si trova attualmente.
In entrambi i casi, è necessario disporre di una coordinata univoca per ogni spazio della griglia sulla faccia del cubo. La traversata dipenderà da come si implementa il sistema di coordinate. Devi sapere dove si trovano anche quelle coordinate sulla superficie della sfera.
Tutto questo alla fine dovrebbe essere sottratto in modo da non saperlo nemmeno.