[C#] [Sourcecode] Yet another A* algorithm 2.0

    • Release

    Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von nikeee13.

      [C#] [Sourcecode] Yet another A* algorithm 2.0

      Hallo zusammen.

      Da es ja in letzter Zeit Mode zu sein scheint (und mir mal wieder langweilig war), habe ich mich jetzt ebenfalls an einem A*-Algorithmus versucht. :P
      Im beiliegendem Testprogramm wird eine Karte mit quadratischen Feldern verwendet, theoretisch werden jedoch alle möglichen Formen und Anordnungen unterstütz (auch unregelmäßige).
      Der Code ist zu lang, um ihn hier zu posten (nicht von den Zeichen her sondern einfach wegen der Übersichtlichkeit), deswegen gibts nur das Projekt zum Download.

      Screenshot:


      Klassendiagramm:


      Programmiersprache/IDE:
      Visual C# (Visual Studio 2012 Ultimate)

      Lizenz:
      Open Source

      Quellcode:
      github.com/Artentus/AStar/
      Dateien
      • AStar.rar

        (83,91 kB, 231 mal heruntergeladen, zuletzt: )
      • AStar 2.0.rar

        (76,14 kB, 372 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Artentus“ ()

      Schau mal: Ka warum das passiert, aber klickt man auf weiter tritt kein Fehler auf ;)
      Bilder
      • array.PNG

        93,78 kB, 642×529, 475 mal angesehen
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
      Hast du möglicherweise auf den letzten Pixel ganz rechts unten geklickt? Das Spielfeld ist nämlich um genau einen Pixel größer, als es eigentlich sein sollte, damit der letzte schwarze Strich noch draufpasst, und dieser letzte schwarze Strich wird dann als nächstest Kästchen gewertet, welches aber natürlich nicht existiert. Ich war einfach gestern zu faul das noch zu beheben. ^^
      Nein, kann ich mir nicht vorstellen. Hab auch grade mal getestet, ich kann die grünen und blauen Kästchen ohne Probleme anklicken ;)
      Muss woanders liegen. Grüße
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
      Ich meinte mit Pixel wirklich Pixel, nicht Kästchen. Also wenn du genau auf den unteren schwarzen Strich klickst (oder die Maus mit gedrückter linker Maustaste da drüberziehst) sollte das passieren.

      Edit: ja, das ist es, habs gerade ausprobiert.
      Wenn dus schnell beheben möchtest: in der Datei "MapControl.cs" findest du in den Methoden "OnMouseDown" und "OnMouseMove" diese beiden Zeilen:

      C-Quellcode

      1. int x = e.X, Width / TileSize;
      2. int y = e.Y, Height / TileSize;
      Ersetzt sie durch diese:

      C-Quellcode

      1. int x = Math.Min(e.X, Width - 2) / TileSize;
      2. int y = Math.Min(e.Y, Height - 2) / TileSize;
      In der OnMouseMove-Methode musst du außerdem noch in die schon vorhandene äußere Abfrage eine weitere Abfrage schachteln:

      C-Quellcode

      1. if (!(e.X < 0 || e.X > Width || e.Y < 0 || e.Y > Height))
      2. {
      3. //...
      4. }
      Ich war mit der bisherigen Umsetzung unzufrieden, deswegen hab ich nochmal ein bisschen was dran gedreht.
      PathNode wurde zum Interface IPathNode, so hat man mehr Freiheiten bei der Verwendung von A*. Die AStarEngine ist mehr oder weniger rausgeflogen, sie dient jetzt nur noch zum implementieren der Extension "FindPathTo" für IPathNode, die ab sofort die Wegfindung übernimmt. Es ist also nicht mehr nötig, eine extra Karten-Klasse anzulegen, die Karte definiert sich bereits vollständig (zumindest soweit vollständig, wie der A* es braucht) durch die Nachbar-Beziehungen der einzelnen Knoten.