Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

24.03.2011, 20:32

Architekt: Genau darum geht es aber. Es soll vorher angezeigt werden, welche Felder in Reichweite (und das muss ja nicht immer nur das angrenzende Tile sein) begehbar/erreichbar (Kosten) ist und welche nicht. Und mit A* eine Prüfung vom selben Start zu allen möglichen Zielen (die ja auch noch unklar sind!), wäre totaler Overkill.

Wie gesagt, einfach mal iterativ Spiral-artig durchgehen. Optimieren kann man eh nicht viel.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

12

24.03.2011, 20:33

Hab es schon verstanden. Siehe meinen edit (;
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Phalax

Frischling

  • »Phalax« ist der Autor dieses Themas

Beiträge: 82

Beruf: Student Media Systems

  • Private Nachricht senden

13

24.03.2011, 20:34

Danke, euch beiden. Ich denke jetzt sollte ich es hinkriegen. :thumbup:

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

24.03.2011, 20:34

@Architekt:
Auch Dein Edit ist aber nicht zutreffend ;) Denn für A* musst Du das Ziel kennen. Das Ziel ist hier aber unbestimmt. Sogar die Reichweite ist unbestimmt, da sie erst ermittelt werden muss und unterschiedlich ist, je nach gewähltem Pfad.

@Phalax:
Jo, mach mal. Wenn's zu lahm ist kann man immer noch über Pre-Calculation der Map nachdenken oder so. Sollte aber kein Problem sein, solange sich Deine Einheiten nicht gerade 100 bis 1000 Felder weit bewegen dürfen. ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

15

24.03.2011, 20:43

@Architekt:
Auch Dein Edit ist aber nicht zutreffend ;) Denn für A* musst Du das Ziel kennen. Das Ziel ist hier aber unbestimmt. Sogar die Reichweite ist unbestimmt, da sie erst ermittelt werden muss und unterschiedlich ist, je nach gewähltem Pfad.

Wenn ich meine Einheiten irgendwohin schicke (z.B. per Mausklick) bzw. zu einem Feind ist das Ziel bekannt und der von dir angesprochene sichtbare Pfad vorhanden. Daher kennt die Einheit das Ziel und ein schrittweise abtasten der jeweiligen nächsten Tiles, wie ich es vorschlug, ist sinnlos.
Würde ich aber mittels Pfeiltasten eine Figur steuern, würde ich lediglich das nächste Tile prüfen, ob es begehbar ist. So war das gemeint ;)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

24.03.2011, 20:50

Du hast das Problem noch immer nicht verstanden. Alle möglichen Zielorte sollen angezeigt werden bevor sich die Einheit überhaupt bewegt, bevor der Spieler entscheidet wohin sie sich bewegen soll. Daher ist das spätere Ziel unbekannt und es muss erst berechnet werden welche Tiles überhaupt in Frage kommen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Phalax

Frischling

  • »Phalax« ist der Autor dieses Themas

Beiträge: 82

Beruf: Student Media Systems

  • Private Nachricht senden

17

25.03.2011, 22:23

Ich habe jetzt den Algorithmus fertig und er funktioniert prima. Ich nutzte einen Ansatz, bei welchem jeweils eine Schleife alle Tiles oben, unten, rechts und links von der Einheit durchlaufen werden. Für jedes in der Schleife vorkommendes Tile prüfe ich dann die Kosten und ziehe sie von der Bewegungsreichweite ab. Von diesen Tiles ausgehend, prüfe ich alle daneben liegenden Tiles und für diese wiederum noch einmalig die anliegenden Tiles. Damit sind dann alle Felder abgedeckt.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Phalax« (25.03.2011, 22:29)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

18

26.03.2011, 14:12

Nice :) So war das gemeint.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

19

26.03.2011, 15:02

Du hättest es auch mit Dijkstra lösen können. Ich sage direkt dazu, dass ich es in dem Fall wohl auch nicht gemacht hätte;) Aber vom Prinzip her hättest du alle Pfade einfach bis zu den maximalen Kosten durchlaufen. Dann hättest du die Tiles einfärben können, oder wie auch immer du die möglichen Tiles markierst;) Wenn der Spieler sich dann für ein Zieltele entscheidet hättest du schon direkt einen optimalen Weg, da du zuvor alle Wege bestimmt hast. Aber der eigentliche Algorithmus den du hier wohl gesucht hast, wurde dir ja schon von BlueCobold genannt. FloodFill nennt er sich. Vom Prinzip ist es, gehe alle "Tiles" oder bei Grafiken dann "Pixel" um dich rum ab, bis eine bestimmte Bedingung erfüllt ist. Also in deinem Fall, gehe alle Wege solange, bis die maximalen Kosten für diesen Weg erreicht sind. Den hätte ich bei dem Problem dann wohl auch gewählt:) Wobei ich den Algorithmus rekursiv schneller zu Lösen finde. Bei der iterativen Lösung kann man schonmal kleine Fehler machen und Teilwege vergessen. Aber solange es klappt:)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Phalax

Frischling

  • »Phalax« ist der Autor dieses Themas

Beiträge: 82

Beruf: Student Media Systems

  • Private Nachricht senden

20

28.03.2011, 17:37

@Schorsch: Danke für den Tipp! :thumbup: In der Schule hatten wir schonmal den Dijkstra - algo theoretisch durchgenommen und ich hab diesen jetzt programmiert um ihn mal in meinem Projekt auszuprobieren. Ich habe nämlich den einen oder anderen Fehler in meinem Algorithmus entdeckt. Außerdem hatte ich ganz vergessen, dass der Dijkstra - algo ja alle Wege berechnet, er also auch für meinen Fall sinnvoll ist. Dazu kommt noch das dieser ja gleich die kürzesten Pfade errechnet und das kann mir später noch zugute kommen.

Edit:

So jetzt funktioniert alles fehlerfrei dank dem Dijkstra - Algorithmus.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Phalax« (28.03.2011, 21:33)


Werbeanzeige