Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Snake - Ein Problem mit dynamischen Arrays (https://www.delphipraxis.net/167525-snake-ein-problem-mit-dynamischen-arrays.html)

MrMooed 4. Apr 2012 16:31

AW: Snake - Ein Problem mit dynamischen Arrays
 
Servus,

Habe mir da mal ein Paar Gedanken zu dem Denkanstoß gemacht und etwas weitergedacht. Wenn man nun die Koordinaten aller Gegenstände von Snake (Schlangenteile, Äpfel, Wände etc.) in einem Array, also einer Art Karte, speichert, stellt sich mir das Problem, wie ich ihm sage wo sich die Schlange befindet und wo deren Kopf liegt (wobei letzteres noch einfach zu erledigen ist) Müsste dort nicht ein weiteres (kleineres) Array zum Einsatz kommen, wo nur Koordinaten der Schlange gespeichert werden ?
Vllt. wäre es noch möglich die "Karte" zu durchsuchen um so an die Stellen zu gelangen, doch dies würde doch enorme Performance Verluste mit sich ziehen oder irre ich da ? :idea:
Werde derweil mal weiter Basteln :-D

Delphi-Laie 4. Apr 2012 16:40

AW: Snake - Ein Problem mit dynamischen Arrays
 
Statt

Zitat:

Zitat von MrMooed (Beitrag 1160012)
KO_Schlange[0,0] := KO_Schlange[0,0] -22

würde ich dec(KO_Schlange[0,0],22) verwenden, zumindest ausprobieren, analog bei den anderen Arrayelementen. Ist kürzer und ein wenig "gehobener".

Deine Fehler sind für mich allein aus der Quelltextbetrachtung nicht nachvollziehbar. Ob dynamische Arrays intern "verzeigert" sind, ist mir nicht bekannt (zumindest gibt der Debugger keine Speicheradressen, sondern Variableninhalte aus), doch selbst wenn, daran können Deine Probleme m.E. nicht liegen. Ich würde an Deiner Stelle - rein aus Interesse - mit dem internen bzw. integrierten Debugger der Sache auf den Grund zu gehen versuchen.

MrMooed 4. Apr 2012 17:01

AW: Snake - Ein Problem mit dynamischen Arrays
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1160207)
[..] würde ich dec(KO_Schlange[0,0],22) verwenden, zumindest ausprobieren, analog bei den anderen Arrayelementen. Ist kürzer und ein wenig "gehobener".

Danke für den Tipp, doch ist es nicht so, dass Dec(X) den Wert um eins erniedrigt ? Wenn dem so ist, ist diese Funktion leider unbrauchbar für mich denn ich will die Schlange ja nicht nur um einen Pixel immer verschieben.

Und was den Debugger anbelangt: Kenne mich mit dem nicht so wirklich aus :oops: wenn es sich um dieses Schritt für Schritt ausführen handelt, das man mit F7 Startet, dann habe ich es schon getestet. Dabei habe ich festgestellt, dass das Array genau so verschoben wird, wie ich es haben will. Allerdings kommt dann bei der neuen Wertzuweisung der Fehler: beide werden verändert und nicht nur die Werte an Stelle [0] (so kam ich ja auf die Idee, dass es sich bei dyn. Arrays um Zeiger handelt, und er somit 2mal mit den selben Werten arbeitet. :shock:)

What ever. Da ich Notgedrungen (Bluescreen :roll:) eh alles neu machen darf, werde ich mich mal um die Version mit einer "Karte" kümmern. Vllt kommt mir ja noch eine Idee

Coffeecoder 4. Apr 2012 17:03

AW: Snake - Ein Problem mit dynamischen Arrays
 
Zitat:

Zitat von MrMooed (Beitrag 1160215)

Danke für den Tipp, doch ist es nicht so, dass Dec(X) den Wert um eins erniedrigt ? Wenn dem so ist, ist diese Funktion leider unbrauchbar für mich denn ich will die Schlange ja nicht nur um einen Pixel immer verschieben.

Nein, du kannst auch den Schritt angeben, siehe hier.

MrMooed 4. Apr 2012 17:26

AW: Snake - Ein Problem mit dynamischen Arrays
 
Soso :roll: ständig lernt man mehr :D

Eine weitere Idee war zur Bewegung: Könnte man es mit einem Try .. exept Block lösen ? Wenn sich die Schlange nun aus dem Spielfeld beweg, also aus dem Bereich des Arrays, würde dies ja zu einer Zugriffsverletzung im Speicher führen. Wenn man ihm aber sagt, dass er dann (exept) ein Leben (oder was auch immer) abziehen soll und die Schlange neu positioniert, wäre doch alles in Ordnung oder ?

Hoffe ihr versteht, was ich meine :lol:

Coffeecoder 4. Apr 2012 17:29

AW: Snake - Ein Problem mit dynamischen Arrays
 
Zitat:

Zitat von MrMooed (Beitrag 1160219)
Soso :roll: ständig lernt man mehr :D

Eine weitere Idee war zur Bewegung: Könnte man es mit einem Try .. exept Block lösen ? Wenn sich die Schlange nun aus dem Spielfeld beweg, also aus dem Bereich des Arrays, würde dies ja zu einer Zugriffsverletzung im Speicher führen. Wenn man ihm aber sagt, dass er dann (exept) ein Leben (oder was auch immer) abziehen soll und die Schlange neu positioniert, wäre doch alles in Ordnung oder ?

Hoffe ihr versteht, was ich meine :lol:

Also man kann jetzt denken was man möchte, aber ich habe das genauso "gelöst". Ich bewege mich solange bis eine Exception kommt dh wenn ich gegen die Wand renne. Dann wirft das eine Exception und ich weiss dass ich verloren habe. Das kann man sicher auch sauberer lösen!

DeddyH 4. Apr 2012 17:33

AW: Snake - Ein Problem mit dynamischen Arrays
 
:shock: Das sollte man auch tun. Exceptions als Mittel zur Ablaufsteuerung sind eine ganz schlechte Wahl.

MrMooed 4. Apr 2012 17:41

AW: Snake - Ein Problem mit dynamischen Arrays
 
Zitat:

Zitat von DeddyH (Beitrag 1160221)
:shock: Das sollte man auch tun. Exceptions als Mittel zur Ablaufsteuerung sind eine ganz schlechte Wahl.

:?: Was denn jetzt sollte man es mit einer try..exeption machen oder ist es "eine ganz schlechte Wahl" :?:
Vllt blicke ich den Post auch nicht weil ich Kopfschmerzen habe :lol:


/EDIT:
Ahh, es bezog sich vermutlich auf den vorherigen Beitrag, dass man es auch sauberer lösen kann. Hat sich also erledigt ;)

DeddyH 4. Apr 2012 17:43

AW: Snake - Ein Problem mit dynamischen Arrays
 
Zitat:

Zitat von Coffeecoder (Beitrag 1160220)
Das kann man sicher auch sauberer lösen!

:shock: Das sollte man auch tun. Exceptions als Mittel zur Ablaufsteuerung sind eine ganz schlechte Wahl.

[edit] Sry, ich wollte editieren und nicht neu posten. Immerhin sollte der Bezug meiner Aussage nun klarer sein. [/edit]

Coffeecoder 4. Apr 2012 17:43

AW: Snake - Ein Problem mit dynamischen Arrays
 
Spontan und sauberer wäre folgendes - Pseudocode:
Code:
- Kopf der Schlange mit dem nächsten Feld vergleichen
- wenn frei dann darf ich mich dahin bewegen
- wenn nicht frei
    - gucken ob es Futter ist > Schlange wachsen lassen usw
    - gucken ob es die Wand ist - wenn ja dann verloren


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:03 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz