AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Snake - Ein Problem mit dynamischen Arrays

Ein Thema von MrMooed · begonnen am 3. Apr 2012 · letzter Beitrag vom 11. Apr 2012
Antwort Antwort
Seite 2 von 4     12 34   
Benutzerbild von MrMooed
MrMooed

Registriert seit: 18. Feb 2012
101 Beiträge
 
Delphi 7 Enterprise
 
#11

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 17:31
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 ?
Werde derweil mal weiter Basteln
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#12

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 17:40
Statt

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.
  Mit Zitat antworten Zitat
Benutzerbild von MrMooed
MrMooed

Registriert seit: 18. Feb 2012
101 Beiträge
 
Delphi 7 Enterprise
 
#13

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 18:01
[..] 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 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. )

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

Registriert seit: 27. Apr 2011
242 Beiträge
 
Delphi 6 Enterprise
 
#14

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 18:03

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.
Coffeecoder
  Mit Zitat antworten Zitat
Benutzerbild von MrMooed
MrMooed

Registriert seit: 18. Feb 2012
101 Beiträge
 
Delphi 7 Enterprise
 
#15

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 18:26
Soso ständig lernt man mehr

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
  Mit Zitat antworten Zitat
Benutzerbild von Coffeecoder
Coffeecoder

Registriert seit: 27. Apr 2011
242 Beiträge
 
Delphi 6 Enterprise
 
#16

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 18:29
Soso ständig lernt man mehr

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
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!
Coffeecoder
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 18:33
Das sollte man auch tun. Exceptions als Mittel zur Ablaufsteuerung sind eine ganz schlechte Wahl.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von MrMooed
MrMooed

Registriert seit: 18. Feb 2012
101 Beiträge
 
Delphi 7 Enterprise
 
#18

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 18:41
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


/EDIT:
Ahh, es bezog sich vermutlich auf den vorherigen Beitrag, dass man es auch sauberer lösen kann. Hat sich also erledigt
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 18:43
Das kann man sicher auch sauberer lösen!
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Coffeecoder
Coffeecoder

Registriert seit: 27. Apr 2011
242 Beiträge
 
Delphi 6 Enterprise
 
#20

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 18:43
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
Coffeecoder
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:10 Uhr.
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