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
So ähnlich habe ich es jetzt auch gelöst, ich gehe von jedem Punkt immer zu dessen nächstem Nachbarn, bis ich alle durch habe, ist zwar nicht ganz optimal, aber reicht mir.Ich habe nach deiner Schilderung mal versucht etwas zu basteln...
Dabei müssen zuerst alle Wegpunkte 'ermittelt' werden... anschließend habe ich die Distanz ausgehen vom letzten Wegpunkt bzw Anfänglich der Spieler-Position berechnet und dann als nächstes den Wegpunkt genommen der am nächsten liegt usw, bis zum letzten ermittelten Wegpunkt
Daraus ergibt sich dann eine Wegpunktliste.... anschließend kann dann diese Liste wiederum an einen Wegfindungs-Algorithmus übergeben werden...
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 |
fill4(x, y) { if (getPixel(x, y) == 0) { markierePixel(x, y, neueFarbe); //Das müsste geändert werden fill4(x, y + 1); // unten fill4(x - 1, y); // links fill4(x, y - 1); // oben fill4(x + 1, y); // rechts } return; } |
Ok, und wie müsste ich es dann erweitern?Wieso muss das geaendert werden? Ich glaube das muesste genau so bleiben.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MitgliedXYZ« (03.04.2013, 15:08)
Mit einer Abbruchbedingung, ob dein Zielpixel gerade umgefaerbt werden soll und dann ein Backtracking zum Start.Ok, und wie müsste ich es dann erweitern?
...und das heißt auf deutsch?Mit einer Abbruchbedingung, ob dein Zielpixel gerade umgefaerbt werden soll und dann ein Backtracking zum Start.Ok, und wie müsste ich es dann erweitern?
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 |
fill4(x, y) { if (getPixel(x, y) == 0 && x != xZiel && y != yZiel) { markierePixel(x, y, neueFarbe); //Das müsste geändert werden fill4(x, y + 1); // unten fill4(x - 1, y); // links fill4(x, y - 1); // oben fill4(x + 1, y); // rechts } return; } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
FloodFill(x, y, n) { if feldIstNichtBetretbar(x, y) // Wenn hier kein Weg möglich return; if gibAktuellenWert(x, y) > n // Neuer Weg wäre länger return; setzeNeuenWert(x, y, n); // markieren FloodFill(x-1, y, n+1); FloodFill(x+1, y, n+1); FloodFill(x, y-1, n+1); FloodFill(x, y+1, n+1); } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Schorsch« (03.04.2013, 18:00)
Zitat von »"MitgliedXYZ"«
Und da ich in meinem Array auch nichts umfärben kann würde der Code in der Form unendlich lange weiterlaufen
Zitat von »"Schorsch"«
Willst du jetzt einen Weg finden müssen die Werte zu deinen Zellen zuerst alle auf Unendlich (Int.Max oder was auch immer) gesetzt werden.
Werbeanzeige