AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Snake - Ein Problem mit dynamischen Arrays

Ein Thema von MrMooed · begonnen am 3. Apr 2012 · letzter Beitrag vom 11. Apr 2012
Antwort Antwort
Benutzerbild von Coffeecoder
Coffeecoder

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

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 17: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.666 Beiträge
 
Delphi 12 Athens
 
#2

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 17: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
 
#3

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 17: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 Coffeecoder
Coffeecoder

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

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 17: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
Benutzerbild von MrMooed
MrMooed

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

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 17:58
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
Sicher so dachte ich mir das am Anfang auch. Doch wenn man versuchen würde die Felder rings herum zu untersuchen und man sich zufälligerweise am Rande des Arrays befindet, müsste es doch eigentlich ne Zugriffvsverletzung geben, da er ja nicht auf etwas zugreifen kann, was nicht im Array liegt So kam ich letztendlich ja auf Tr..Exept
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#6

AW: Snake - Ein Problem mit dynamischen Arrays

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

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 18:16
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:
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;
Jenachdem ob 'moeglich' True ist bewegt sich dann die Schlange - oder eben nicht. Hätte mir das jetzt eigentlich länger vorgestellt aber wären nicht "schnellere" Versionen mit Try..Exept zu bevorzugen ? Man muss ja nicht immer das Rad neu erfinden
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#8

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 18:32
aber wären nicht "schnellere" Versionen mit Try..Exept zu bevorzugen ?
Klar, ich achte ja auch nie darauf, ob eine Ampel rot zeigt, da mein Auto über Sicherheitsgurte und Airbags verfügt
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 DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#9

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 17: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
Antwort Antwort

 

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 00:04 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