kostenloser Webspace werbefrei: lima-city


Weg durch "Hindernisparkur" berechnen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    drafed-map

    Kostenloser Webspace von drafed-map

    drafed-map hat kostenlosen Webspace.

    Hi, ich habe ein kniffliges Problem zu lösen.

    Ich muss für ein Spiel einen Weg auf einer 2D-Karte berechnen. Dieser Weg hat einige Hindernisse, die Mauern, die überall vorkommen können. Durch eine Mauer kann grundsätzlich durch gebrochen werden, nur leider macht das dem Läufer viel Arbeit. Er will so wenig wie möglich Arbeit haben, und schnell zu seinem Ziel kommen. Ist es aber zu viel zu Laufen, so soll der Läufer eine Mauer durchbrechen. Befinden sich 2 Mauern hinter einander, so ist es natürlich doppelt so schwer, diese zu durchbrechen. Der Läufer "hüpft" immer von Kästchen zu Kästchen und kann sich frei bewegen, also auch diagonal. Wie viel Arbeit es dem Läufer macht, von Kästchen zu Kästchen zu springen, und wie viel Arbeit es ihm macht, eine Mauer zu durchbrechen. Das sollte also möglichst mit Variablen einstellbar sein.

    Mit Google habe ich eine Menge Anleitungen gefunden, wie man einen Hindernis-Parkur durchquert, aber in keinem bestand die Möglichkeit, ein Hindernis ab zu reisen, wenn der Weg zu schwierig wird. Das ist vorallem dann wichtig, wenn das Ziel vollkommen eingemauert ist. Hier habe ich ein kleines Schaubild gemacht: http://drafed-map.lima-city.de/im_lc-forum/schaubild_mit_mauern.png. Die Farben sind unwichtig, die haben mit dem Thema nichts zu tun. Je nachdem, wie man mit den Mühe-Werten für das Laufen und für das Mauer einreisen rum Spielt, soll der Läufer durch die Mauer brechen, oder außen rum laufen.

    Hat jemand von euch eine Idee, wie man das realisieren kann?


    Edit: Achja, A ist der Startpunkt, B ist das Ziel und M sind Mauer-Elemente. Dem Läufer genügt es in diesem Fall zum Durchmarsch, wenn er ein Mauer-Element einreist.

    Beitrag zuletzt geändert: 18.2.2010 21:43:06 von drafed-map
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t*****b

    Die allererste Frage ist: wann lohnt es sich, eine Mauer einzureisen? Das solltest du fest deffinieren können. Zum Beispiel sind 6 Schritte genauso effizeint wie eine Mauer einzureisen.
    Als nächstes musst du dich mit Pathfinding befassen. Das heißt, du suchst dir durch deinen zweidimensionalen Array den schnellsten Weg. Ist dieser Weg zu aufwändig (Parameter), dann wird eine Mauer eingerissen. Da Pathfinding mit Kollisionskontrolle arbeitet, könntest du einen neuen Weg berechnen, wenn die Kollision bei x/y fehlt. Dann einfach bei den Durchgänegn ausprobieren, welches Mauerteil am besten einzureißen wäre.
  4. Die Lösung heisst: A*-Algorithmus. Dieser muss dann ggf. angepasst werden. Dies geschah bereits im Thread Einfaches Pathfinding, was schon die einfachste und praktisch (nach ggf. ein wenig optimierung) schnellste variante Darstellt.
  5. Meine linkempfehlung dazu ist diese Seite:
    A* Pfadfindung für Anfänger
    Durch diese Seite habe ich es geschafft den A*-Algorithmus zu verstehen ;-)

    Viel Spass beim Coden :thumb:
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!