AGB  ·  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 1 von 4  1 23     Letzte » 
Benutzerbild von MrMooed
MrMooed

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

Snake - Ein Problem mit dynamischen Arrays

  Alt 3. Apr 2012, 18:11
Hallo DPler,

Da ich nun Schulferien habe, dachte ich mir, dass ich mal etwas größeres in Angriff nehmen könnte. Gesagt Getan die Idee war ein Snake Spiel zue porgrammieren (Ja ich komme gleich zu meinem Problem, will nur meinen Gedankengang klar machen ) Jedenfalls hatten wir gerade in der Schule Arrays. Da mir der Stoff in der Schule nie wirkliche Probleme bereitet, habe ich mich auch diesmal etwas intensiever mit dem Thema befasst und mir neben statischen Arrays nun auch dynamische angesehen.

Nun zu meinem eigentlichen Problem bei Snake:
Ich hatte mir gedacht, dass die Schlange (frei erfunden) aus 5 Stücken besteht. jedes dieser Stücke soll als ein Rechteck auf einer PainBox gezeichnet werden. D.h. in dem dyn. Array muss es an jeder Stelle 4 Integer Werte geben für Canvas.RectAngle(X1,Y1,X2,Y2). Soweit so gut. Zur Bewegung habe ich mir gedacht, dass das Array um eins nach hinten verschoben wird (der letzte Wert soll bewusst verloren gehen) so entsteht an der ersten Stelle ein Doppelter wert, in dem dann die neue Position des ersten Vierecks gespeichert werden soll. Dort möchte ich dann den doppelten wert nehmen, und dann z.B. in die X-Richtung (also nach Rechts) 10 Addieren. Somit würde das Viereck dann 10 Pixel neben dem zweiten liegen. Das ganze geschieht bei mir in dem OnTimer Event eines Timers.

Und Delphi (bzw. ich ) kriege es nicht gebacken. Warum auch immer ändert er Array[0] UND Array[1] So hat er natürlich spätestens nach 5 durchläufen überall die gleichen Koordinaten.

Wäre nett, wenn jemand meine Gedankengang nachvollziehen konnte und mir vllt. sagen kann wo mein Fehler im Kopf und/ oder der Programmierung liegt

Delphi-Quellcode:
procedure TForm1.Bewegen(Sender: TObject);
var
  i: integer;
begin
  // Array nach hinten verschieben, so dass die ersten beiden Werte gleich sind
  for i:=High(KO_Schlange) downto 1 do
    KO_Schlange[i] := KO_Schlange[i-1];
  // gucken in Welche Richtung sich die schlange bewegen soll, und dann dementsprechend
  // die Koordinaten des ersten Vierecks ändern (KO_Schlange[0,XXX])
  Case Richtung of
    0: begin
         KO_Schlange[0,0] := KO_Schlange[0,0] -22;
         KO_Schlange[0,2] := KO_Schlange[0,2] -22;
       end;
    1: begin
         KO_Schlange[0,1] := KO_Schlange[0,1] -22;
         KO_Schlange[0,3] := KO_Schlange[0,3] -22;
       end;
    2: begin
         KO_Schlange[0,0] := KO_Schlange[0,0] +22;
         KO_Schlange[0,2] := KO_Schlange[0,2] +22;
       end;
    3: begin
         KO_Schlange[0,1] := KO_Schlange[0,1] +22;
         KO_Schlange[0,3] := KO_Schlange[0,3] +22;
       end;
    end;
  ZeichneSchlange;
end;
/EDIT:
Kann es sein, dass dyn. Arrays nicht die Werte enthalten sondern nur Zeiger ? (sorry wenn es tatsächlich so ist, aber von Zeigern/ etc. hat noch nie ein Infolehrer geredet..) das würde erklären warum immer die Teile vom Array geändert werden, die die selben Werte/ Zeiger besitzen. Denn am Ende würden dann alle auf den einen Wert im Speicher zeigen mit dem dann gerechnet wird.
War nur eine Idee die mir gerade noch gekommen ist.

Geändert von MrMooed ( 3. Apr 2012 um 18:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.179 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 3. Apr 2012, 20:00
Ist ne interessante Vermutung. Bei soetwas weiß ich auch nie auf Anhieb, obs der Fall ist - einfach testen.

Sicherheitshalber kannste ja den Inhalt des Arrays "manuell" rüberkopieren
Delphi-Quellcode:
  for i:=High(KO_Schlange) downto 1 do
    Move(KO_Schlange[i-1,0], KO_Schlange[i,0], Length(KO_Schlange[i]) * sizeof(KO_Schlange[i,0]));
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  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 3. Apr 2012, 21:05
Jau so funktioniert das ganze

Danke dir Aphton. Schade, dass einem sowas in der Schule nicht vermittelt/ erklärt wird. Das einzige mal das ich von so einer Unterscheidung gehört habe war hier bzw. in anderen Delphi-Foren. Aber das Thema Schulbildung etc. ist ein gänzlich anderes Thema

Vielen Dank nocheinmal. Bei Interesse würde ich den Programmcode noch etwas aufhübschen und dann hier hochladen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
35.633 Beiträge
 
Delphi XE6 Professional
 
#4

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 3. Apr 2012, 21:34
Wer High() sagt kann/sollte auch Low() sagen
Markus Kinzler
  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 3. Apr 2012, 21:52
'Nabend

Ist das nicht letztendlich Jacke wie Hose ob ich nun downto Low(Array)+1 oder einfach nur downto 1 schreibe ? Oder verbirgt sich da ein Vorteil den ich bloß nicht sehe ?
Wenn dem so ist werde ich mir diese Schreibweise mal eineignen. Wobei Komplizierter = cooler ist

MfG
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
35.633 Beiträge
 
Delphi XE6 Professional
 
#6

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 3. Apr 2012, 21:57
Bei einem dynamischen Array ist es Strump wie Socke, da hast du recht. Wenn es sich aber um eine statischenn Array handeln würde, würde der Code mit High()/Low() funktionieren, der mit einer festen Grenze aber nicht.
Markus Kinzler
  Mit Zitat antworten Zitat
Popov

Registriert seit: 15. Mai 2005
Ort: Köln
2.125 Beiträge
 
Delphi 7 Professional
 
#7

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 3. Apr 2012, 22:46
Wobei sich die Frage stellt warum überhaupt ein Array für Snake? Ich habe vor einiger Zeit mal just4fun Snake geprogt, nur um zu sehen wie schnell ich so ein Game hinkriege, und dabei ist es mir aufgefallen, dass es Quatsch ist ein Array für Snake zu nehmen. Ich schätze man nimmt es weil es im ersten Moment logisch erscheint. Aber wenn man genau drüber nachdenkt, dann ist ein Array für Snake doppeltgemoppelt.
Popov
Abrakadabra, Embarcadero, dreimal schwarzer Kater...
  Mit Zitat antworten Zitat
Benutzerbild von Coffeecoder
Coffeecoder

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

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 07:35
Wobei sich die Frage stellt warum überhaupt ein Array für Snake? Ich habe vor einiger Zeit mal just4fun Snake geprogt, nur um zu sehen wie schnell ich so ein Game hinkriege, und dabei ist es mir aufgefallen, dass es Quatsch ist ein Array für Snake zu nehmen. Ich schätze man nimmt es weil es im ersten Moment logisch erscheint. Aber wenn man genau drüber nachdenkt, dann ist ein Array für Snake doppeltgemoppelt.
In der Tat. Ich bin gerade selbst dabei ein Snake zu proggen (zwar in Java). Da ist mein "Snake" selbst das "Array", in dem Point als Koordinaten (Körper der Schlange) beinhaltet.
Coffeecoder
  Mit Zitat antworten Zitat
Benutzerbild von MrMooed
MrMooed

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

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 09:11
In der Tat. Ich bin gerade selbst dabei ein Snake zu proggen (zwar in Java). Da ist mein "Snake" selbst das "Array", in dem Point als Koordinaten (Körper der Schlange) beinhaltet.
Also würdest du alle Koordinaten (sei es nun die der Schlange als auch die der Äpfel/ Münzen) in einem Array Speichern ? Hmm eigentlich wäre das wirklich sinnvoller Werde das ganze dann wohl nochmal überarbeiten. Trotzdem vielen Dank für die Anregungen

Zu allem Überfluss ist mein Laptop mit nem Bluescreen sbgeschmiert und hat das komplette Delphi Projekt zerschossen. Exakt in dem Moment, in dem ich auf Speichern geklickt habe auf ein neues
  Mit Zitat antworten Zitat
Benutzerbild von Coffeecoder
Coffeecoder

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

AW: Snake - Ein Problem mit dynamischen Arrays

  Alt 4. Apr 2012, 09:36
Wenn ich zuhause bei meinem Rechner sitze kann ich vielleicht einen kleinen Einblick geben
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 · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2014 by Daniel R. Wolf