![]() |
AW: Snake - Ein Problem mit dynamischen Arrays
Zitat:
|
AW: Snake - Ein Problem mit dynamischen Arrays
Du hast nur dann einen Vorgänger, wenn der aktuelle Array-Index > Low(Array) und nur dann einen Nachfolger, wenn der Index < High(Array) ist. Das kann man abfragen, dazu braucht es kein extra Exception-Handling.
|
AW: Snake - Ein Problem mit dynamischen Arrays
Ahhh *klick* Somit müsste ich also vor jeder Bewegung überprüfen lassen, ob in der aktuellen Richtung ein Block vorhanden ist -> falls nicht Leben abziehen/ Beenden. Habe hier ebenfalls auf nicht auf die Syntax geachtet, aber so in etwa würde es dann ausschauen:
Delphi-Quellcode:
Jenachdem ob 'moeglich' True ist bewegt sich dann die Schlange - oder eben nicht. Hätte mir das jetzt eigentlich länger vorgestellt :lol: aber wären nicht "schnellere" Versionen mit Try..Exept zu bevorzugen ? :o Man muss ja nicht immer das Rad neu erfinden :-D
möglich = True
case Richtung of vorwärts: if Array[i+1] > High(Array) then moeglich = False; unten : if Array[i-1] < Low(Array) then moeglich = False; rechts : if Array[i,b+1] > High(Array[i]) then moeglich = False; links : if Array[i,b-1] < Low(Array[i]) then moeglich = False; end; |
AW: Snake - Ein Problem mit dynamischen Arrays
Zitat:
|
AW: Snake - Ein Problem mit dynamischen Arrays
Zitat:
Beispiel Array 40x40 als Byte (mehr braucht man nicht) Vereinbarung: 0 ist leeres Feld, 1 bis 126 Snake, wobei 1 der Kopf ist, 127 ist der Apfel, 128 Wand, Rest 129 bis 255 offen für Erweiterungen Eine Count Variable für die Länge der Schlange, wobei man auf die verzichten könnte, aber wir wollen es nicht zu kompliziert machen Neue Kopfposition berechnen, prüfen auf Kollision mit Apfel oder Wand, bei Apfel Count erhöhen, bei Wand Ende Mit zwei For-Schleifen (X/Y) das Ganze Array durchlaufen. Wert 0 und Werte größer 126 werden ignoriert Alle Werte zwischen 1 und (126 - 1) und 1 erhöhen Kopf-X/Y-Position übertragen und den Wert 1 zuweisen Werte größer Count löschen, bzw. 0 setzten Fertig In einer weiteren Prozedur mit den Werten zeichnen. |
AW: Snake - Ein Problem mit dynamischen Arrays
Zitat:
Warum sollte ich mich gegen das Aute stellen, wenn ich auch einfach die Bremse zum bremsen nutzen kann :gruebel: Viele Wege führen nach Rom ;) |
AW: Snake - Ein Problem mit dynamischen Arrays
Zitat:
|
AW: Snake - Ein Problem mit dynamischen Arrays
Tach,
aaaalso mein erster Post in einem Delphi-Forum ;-) Ich bin kein großer Praktiker und schon gar nicht für Delphi (meine Güte bin ich froh, dass ich nach der Schulzeit nie wieder etwas damit zu tun hatte), aber jetzt mal den *Klugscheiß-Modus an* und aus der Theorie geplaudert: Ein dynamisches Array ist schon eine nette Idee für die Schlange, allerdings gibt es schönere Datenstrukturen dafür. Z.B. eine FIFO (first in first out). Klassisch wäre dies wohl TQueue, ein Erbe von Collection. Was den Speicherplatz angeht: bei solchem "Kleinkram" achtet heute niemand mehr auf Speicher, trotzdem ist es schlechter Stil, Speicher zu verschwenden. Willst du also deine Schlange zwingend in einer eigenen Datenstruktur speichern, wäre es ratsam eine eigene Klasse Schlange anzulegen. Die Klasse bekommt intern einen Fifo, mit dem die aktuell belegten Felder gespeichert werden, und enthält Methoden um den Richtungswechsel zu verarbeiten, Position zurück zu geben ect. Hmm... Jetzt bin ich abgeschweift. Zurück zum FIFO: der Fifo muss nur X Elemente speichern, wobei X die Länge der Schlange ist. Du musst dir keine 4 Elemente Pro Schlangen-Abschnitt merken! Theoretisch reicht ein Punkt (x,y) oder noch schöner nur ein Wert Z. Dazu nummerierst du gedanklich deine Positionen durch. Hast du ein Feld, dass a breit ist und b hoch, so sagt dir z.b. x mod a die Zeile in der ein Element ist und x div b die Reihe. Somit musst du maximal pro Sclangen-Teil noch einen Integer speichern (schöner noch nen byte). *Klugscheiß-Modus aus* Naja, praxisnah war das wohl nicht, aber so wird der Quatsch heute noch an der Uni gelehrt ;-) Greetz |
AW: Snake - Ein Problem mit dynamischen Arrays
Zitat:
|
AW: Snake - Ein Problem mit dynamischen Arrays
Zitat:
Was ist bei deiner Teilnahme im Straßenverkehr die Regel und was die Ausnahme? a) Benutzung der Bremse b) Benutzung des Airbags So viel zu den Beispielen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz