Mentos (21.04.2012)
Thema: Pathfinder
-
21.04.2012, 01:38 #1
- Registriert seit
- 18.12.2011
- Beiträge
- 159
- Blog Entries
- 2
Thanked 182 Times in 98 PostsPathfinder
Hallo,
Eine kleine Knobelaufgabe, ich brauchte das mal wieder nach einiger Zeit. Das ganze ist eine Klassenbibliothek (.dll) und hat drei Klassen.
Vorweg muss glaube ich erklärt werden, was ein Pathfinder überhaupt ist.
Ein Pathfinder findet auf einer Map (in meinem Fall 2D) den Weg zu einer bestimmten Zielkoordinate und umgeht wenn nötig Blockaden (wie z.B. Wände).
In meinem Pathfinder ist aber nicht nur eine Pathfinder-Klasse sondern auch eine Map und eine Character Klasse. Man kann ohne viel ändern zu müssen, diese gleich für ein einfaches Spiel oder whatever nutzen.
Map Klasse (Int32 Width, Int32 Height)
Die wichtigste Variable in der Map Klasse ist die fields Variable (String[,]), ein mehrdeminsionaler String. Jede Koordinate hat einen String zugeordnet der Informationen enthält über die Koordinate, in meiner Klasse jetzt nur ob sie begehbar ist oder nicht, aber man kann durch die Funktion „AddFieldInfo(String name, String value, Int32 x, Int32 y)” eigene Infos dazupacken. Wie z.B. das Aussehen des Tiles (Gras / Wasser - wenn man es auf eine Spiel-Map abgesehen hat) oder was man eben gerne mag.
Character Klasse (String heroname)
Die Character Klasse erstellt einen Charakter den man auf eine Map spawnen kann, mithilfe der Spawn(Map map, Int32 x, Int32 y) Funktion. Der String im Konstruktor ist eigentlich nur so da, bis jetzt keine Funktion.
Spannend wird es, nachdem man seinen Character gespawnt hat und ihn via move(Int32 x, Int32 y) bewegt. Man übergibt x & y Koordinate und dieser ruft dann folgendes auf ...
Pathfinder Klasse
Hat eine statische Funktion „Find(Character c, Int32 x, Int32 y)”, welche die Schritte zurückgibt wie man zu seiner Zielkoordinate hinkommt (x, y). Kommt man nicht hin, wird eine leere List<Int[]> zurückgegeben. Den Charakter könnte man auf einer grafischen Oberfläche dann in etwa so bewegen, dass man die List<Int[]> mit einer Forschleife durchgeht und dann den Char dahinbewegen lässt.
Der Aufruf würde in etwa so lauten
Code:Map justmap = new Map(10, 10); Character c = new Character("Drilon"); for (int i = 4; i < 10; i++) { justmap.BlockField(i, 2); } c.Spawn(justmap, 5, 0); c.Move(6, 6);
Falls einer keine Lust hat das ganze runterzuladen, hier die Pathfinder Funktion im Spoiler. Die Console.WriteLines() könnt ihr gerne rausnehmen, sind nur zum Test da.
Spoiler:
-
The Following User Says Thank You to Raumi For This Useful Post:
-
24.04.2012, 00:22 #2
- Registriert seit
- 18.12.2011
- Beiträge
- 159
- Blog Entries
- 2
Thanked 182 Times in 98 PostsAW: Pathfinder
So, habe das ganze in ein GUI gepackt als .exe. Ich glaube das illustiert am besten die Art und Weise wie der Pathfinder funktioniert.
Download: SimplePathfinderGUI.rar
Blau: Character
Rot: Wand
Gelb: Ziel
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.