A * Pathfinding über mehrere Gitter

9

Ich versuche A * Pathfinding um einen Würfel zu implementieren, der Würfel besteht aus 6 Grids und um es einfach zu halten habe ich 4 Methoden GetXPlus, GetXMinus, GetYPlus, GetYMinus. Jede Methode überprüft, ob die nächste Kachel innerhalb des aktuellen Rasterbereichs liegt, wenn nicht, wechselt sie in das entsprechende Raster.

Das Problem, das ich habe, ist, wenn ich versuche, eine Kachel von einem Gitter zu bekommen, das umgekehrt aus dem aktuellen Gitter gekippt wird, die Kachel, die zurückgegeben wird, ist auf der gegenüberliegenden Seite. Gibt es einen Weg oder eine Herangehensweise, die es mir erlauben würde, eine eindeutige Logik für jedes einzelne Ursprungsgitter und jede Richtung zu schreiben?

Um mein Problem zu artikulieren, habe ich aus dem (purpurnen) Grid abgeleitet und verwende die GetXPlus-Methode:

Ein Snippit meiner aktuellen Implementierung (jedes Raster ist 64 mal 64):

%Vor%

Hintergrund

Diese Implementierung entstand aus einer ausgezeichneten Antwort auf eine andere Frage, die hier vorgeschlagen wurde: Ссылка

    
Caius Eugene 18.04.2013, 17:03
quelle

2 Antworten

1

Ich würde vorschlagen, dass Sie noch weiter gehen als in der vorherigen Antwort vorgeschlagen. Erstellen Sie einen Würfel, der alle Kacheln darstellt und dass Sie die Nachbarn jeder Kachel zwischenspeichern. Da die Beziehungen zwischen den Kacheln fest sind, wird es dir viel Zeit sparen.

Danach können Sie eine double[,,] oder int[,,,] verwenden, um Ihre verarbeiteten Kacheln zu verfolgen und basierend darauf Nachbarn zu Ihrer Queue<Tile> hinzuzufügen.

Bei Bedarf können Sie auch GetDirection(Tile tile) implementieren. Diese Funktion muss nur im Routenverzeichnis suchen.

Öffentliche Klasse Cube     {         private Tile [,,] Kacheln;

%Vor%     
Corniel Nobel 14.05.2013 13:43
quelle
0

Sie könnten Funktionen verwenden, die von einem 3D-Koordinatenraum aus "X-Koordinate", "Y-Koordinate" und "Kacheln" zu einem anderen mappen.

Gegeben eine Bestellung:

%Vor%

Sie können diese Übergänge in Arrays Ihrer Klasse Tile speichern:

%Vor%

Dann müssen Sie nur ein wenig aufpassen, wenn Sie die Struktur einrichten. So könnten Sie beispielsweise die grüne Kachel einrichten, vorausgesetzt, Ihre Koordinaten liegen zwischen 1 und einschließlich 64.

%Vor%

Beachten Sie, dass die Kachelübergangsfunktion nur eine Nachschlagefunktion ist, aber um voll flexibel zu sein, können Sie auch Funktionen der Typen verwenden:
Func<int, int, Tile, int> für die X-Koordinate,
Func<int, int, Tile, int> für die Y-Koordinate, und
Func<int, int, Tile, Tile> für die Kachel.

    
Tilo 13.05.2013 22:54
quelle

Tags und Links