procedure selbst erstellen
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: procedure selbst erstellen
damit meinte ich die vor 5 Posts geposteten funktion Rumpftop und Rumpfleft...
Da bei dieser funktion ja schon Potential gibt sie zu verbessern, wie carli schon sage, eben mit Array oder dann auf ein Canvas, entweder das der Form /Paintbox oder Image zeichnen...
Da bei dieser funktion ja schon Potential gibt sie zu verbessern, wie carli schon sage, eben mit Array oder dann auf ein Canvas, entweder das der Form /Paintbox oder Image zeichnen...
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: procedure selbst erstellen
Mit ein bisschen CodeStyle brechen gehts auchpluto hat geschrieben:Das glaube ich kaum. Wobei: Wenn man es sehr, sehr einfach macht vielleicht.Wenn ich genau wüsdte was das für images sind und so (qullcode des ganzen Programms) könnte man das bestimmt auf unter 30 Zeilen zusammenfassen

-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: procedure selbst erstellen
Es würde auch reichen, meinen Code anzuschauen. Den habe ich als Lern-Projekt hochgeladen und auch als solches geschrieben. Der ist zwar etwas länger, aber sollte die meisten Fragen klären.
eigentlich wollte ich auch noch ein Tutorial schreiben, aber ich habe kein Programm gefunden womit das gehen könnte.
sagt jetzt nicht OpenOffice oder MS Office *G*. Wobei: vielleicht geht es jetzt. Es gibt so eine Web-Ansicht bei OpenOffice.
eigentlich wollte ich auch noch ein Tutorial schreiben, aber ich habe kein Programm gefunden womit das gehen könnte.
sagt jetzt nicht OpenOffice oder MS Office *G*. Wobei: vielleicht geht es jetzt. Es gibt so eine Web-Ansicht bei OpenOffice.
MFG
Michael Springwald
Michael Springwald
Re: procedure selbst erstellen
tja leider bin ich kein profi in dem programm
deshalb stell ich hier ja die fragen wie man das besser machen kann, da helfen mir solche antworten nich viel
könnt ihr das nich richtig erklären vllt mit code usw?

deshalb stell ich hier ja die fragen wie man das besser machen kann, da helfen mir solche antworten nich viel

könnt ihr das nich richtig erklären vllt mit code usw?
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: procedure selbst erstellen
Das Erklären kostet Zeit, den Code hast du ja schon.
Ich könnte dir ein Link zu einem Tutorial geben, jedoch ist das für Delphi geschrieben(von mir) und nutzt eine Komponenten Sammlung: DelphiX.
Hier findest du einige Snake-Tutorials:http://www.delphipraxis.net/
edit01: Womit hast du denn genau Probleme? Dynamische Array's?
Ich könnte dir ein Link zu einem Tutorial geben, jedoch ist das für Delphi geschrieben(von mir) und nutzt eine Komponenten Sammlung: DelphiX.
Hier findest du einige Snake-Tutorials:http://www.delphipraxis.net/
edit01: Womit hast du denn genau Probleme? Dynamische Array's?
MFG
Michael Springwald
Michael Springwald
Re: procedure selbst erstellen
jo
im moment mach ich das mit images die ich hinten ranhänge, funktioniert bloß nich so gut weil es wie eine stange von images aussieht und außerdem nur linea bewegt
wenn du mir das mit den arrays erklären könntest wäre ich sehr dankbar
im moment mach ich das mit images die ich hinten ranhänge, funktioniert bloß nich so gut weil es wie eine stange von images aussieht und außerdem nur linea bewegt
wenn du mir das mit den arrays erklären könntest wäre ich sehr dankbar
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: procedure selbst erstellen
Ein array kann man ganz leicht erklären:
Du hast ein Programm mit folgende Variablen für die Posisionierung von deinen Schlangenteilen zum beispiel:
so , s steht für schlange
1 ist dann das element
und x steht für left, y für top...
Das kann man erstmal vereinfachen:
Du kannst jetzt s1.x und s1.y verwenden, sieht schonmal schöner aus, hat aber noch nichts mit arrays zu tun.
Wenn du jetzt Deine schlange bewegen willst dann machst du das so:
/also alles rückt anch und der kopf bewegt sich entweder nach links /rechts /oben /unten...
So und jetzt eine Aufgabe: Gib mir den Code für 200 Schlangenteile,
VIEL SPAß !!!
Genau dafür ist ein Array da, am besten kann man ein Array mit einer for schleife verwenden.
Du definierst die variable jetzt als:
So, es wird jetzt von 1 bis 5 - TPoint's erstellt...
Ein Array ist sozusagen wie ein Schrank mit vielen Schubladen, in diesen Fall Schublade 1 bis 5... Du kannst diese jetzt in einer For-Schleife oder wie auch immer mit einer Zah abrufen...
jetzt kannst du auf das erste Element zugreifen indem du folgendes machst:
Das Tolle: du kannst due 1 auch durch eine Variable oder sinst etwas ersetzen...
Der Nachteil: Ist diese Variable nicht in unserem Bereich von 1..5 gibts nen Netten Fehler...
Du könntest den Ganzen Code umschreiben aber vorher empfehle ich dir eine kleine Änderung der Definition vorzunehmen:
Hä, wieso jetzt von 0 zu 4 . von 1 zu 5 war doch auch gut .
Ja, es macht überhaupt keinen Unterschied, nur ist es besser sich direkt richtig drann zu gewöhnen... Und Richtig heißt in diesem Sinn, ein Array fängt immer mit 0 an. Wieso wirst du später sehen...
Erstmal zeig ich aber wie du die Schlange damit bewegst...
Aus dem Code:
wird folgende;
Beachte, "Downto" zählt rückwärts... es gibt auch nur "to", das zählt hoch...
Das Tolle hieran ist leicht zu erkennen oder ?
Soll der jetzt das 200 mal machen dann änderst du die 4 einfach in eine 200...
So und jetzt zu dem Grund wieso unser Array von 0..4 geht...
Der Dynamische Array:
Ist im Grunde das Gleiche , nur das dieser ein bisschen anders Definiert wird:
Ja, aber jetzt steht da keine [0..4] mehr, wie viele Variablen kann ich jetzt da Speichern ???
NULL. Im moment, denn wir kömmen dem Array sagen wieviel wir speichern wollen, dynamisch eben , zu laufzeit:
Und hier steckt auch der Grund drinn wieso wir eben gesagt haben wir fangen bei 0 an und gehen auf 4...
Dann bei dynamischen Array's fängt es immer bei 0 an.
Das niedrigste Element ist also s[0] und das höchste s[199].
mit high(s) bekommen wir den Wert 199. Das höchste Element.
Mit length(s) bekommen wir 200. Die insgesammt länge.
Mit low(s) bekommen wir das niedrigste , also immer 0...
Die 3 Funkionen gehen auch bei den Normalen Array...
Der Code würde jetzt heißten:
Du könntest jetzt jedes mal wenn die Schlange länger wird folgendes machen:
setlength(s,length(s)+1);
und in s[high(s)] dann die neue Position speichern...
In deinem Fall solltest du erstmal von den Images wegkommen und auf Deine Form Zeichen.
Du kannst z.B Form1.Canvas.CopyRect(arect... , Image3.Picture.Birmap.Canvas , brect...);
kopiert Image3 auf Die Form1 und zwar von brect auf arect... Einfach mal ausprobieren...
Ach ja, für den Fall das ich nicht erklären kann
Hier:
http://www.delphi-treff.de/tipps/object ... he-arrays/" onclick="window.open(this.href);return false;
Du hast ein Programm mit folgende Variablen für die Posisionierung von deinen Schlangenteilen zum beispiel:
Code: Alles auswählen
s1x,s1y,s2x,s2y,s3x,s3y,s4x,s4y,s5x,s5y:integer;
1 ist dann das element
und x steht für left, y für top...
Das kann man erstmal vereinfachen:
Code: Alles auswählen
s1,s2,s3,s4,s5:TPoint;
Wenn du jetzt Deine schlange bewegen willst dann machst du das so:
Code: Alles auswählen
s5 := s4;
s4 := s3;
s3 := s2;
s2 := s1;
s1 := s1.x + 1;
So und jetzt eine Aufgabe: Gib mir den Code für 200 Schlangenteile,
VIEL SPAß !!!
Genau dafür ist ein Array da, am besten kann man ein Array mit einer for schleife verwenden.
Du definierst die variable jetzt als:
Code: Alles auswählen
s: array [1..5] of TPoint;
Ein Array ist sozusagen wie ein Schrank mit vielen Schubladen, in diesen Fall Schublade 1 bis 5... Du kannst diese jetzt in einer For-Schleife oder wie auch immer mit einer Zah abrufen...
jetzt kannst du auf das erste Element zugreifen indem du folgendes machst:
Code: Alles auswählen
s[1].x := s[1].x + 1;
Der Nachteil: Ist diese Variable nicht in unserem Bereich von 1..5 gibts nen Netten Fehler...
Du könntest den Ganzen Code umschreiben aber vorher empfehle ich dir eine kleine Änderung der Definition vorzunehmen:
Code: Alles auswählen
s: array [0..4] of TPoint;
Ja, es macht überhaupt keinen Unterschied, nur ist es besser sich direkt richtig drann zu gewöhnen... Und Richtig heißt in diesem Sinn, ein Array fängt immer mit 0 an. Wieso wirst du später sehen...
Erstmal zeig ich aber wie du die Schlange damit bewegst...
Aus dem Code:
Code: Alles auswählen
s5 := s4;
s4 := s3;
s3 := s2;
s2 := s1;
s1 := s1.x + 1;
Code: Alles auswählen
var
i:integer;
begin
for i := 4 downto 1 do
begin
s[i] := s[i-1];
end;
s[0] := s[0].x + 1;
end;
Das Tolle hieran ist leicht zu erkennen oder ?
Soll der jetzt das 200 mal machen dann änderst du die 4 einfach in eine 200...
So und jetzt zu dem Grund wieso unser Array von 0..4 geht...
Der Dynamische Array:
Ist im Grunde das Gleiche , nur das dieser ein bisschen anders Definiert wird:
Code: Alles auswählen
s: array of TPoint;
NULL. Im moment, denn wir kömmen dem Array sagen wieviel wir speichern wollen, dynamisch eben , zu laufzeit:
Code: Alles auswählen
setlength(s,200);
Dann bei dynamischen Array's fängt es immer bei 0 an.
Das niedrigste Element ist also s[0] und das höchste s[199].
mit high(s) bekommen wir den Wert 199. Das höchste Element.
Mit length(s) bekommen wir 200. Die insgesammt länge.
Mit low(s) bekommen wir das niedrigste , also immer 0...
Die 3 Funkionen gehen auch bei den Normalen Array...
Der Code würde jetzt heißten:
Code: Alles auswählen
var
i:integer;
begin
for i := high(s) downto 0 do // nur die 4 durch high ersetzt...
begin
s[i] := s[i-1];
end;
s[0] := s[0].x + 1;
end;
setlength(s,length(s)+1);
und in s[high(s)] dann die neue Position speichern...
In deinem Fall solltest du erstmal von den Images wegkommen und auf Deine Form Zeichen.
Du kannst z.B Form1.Canvas.CopyRect(arect... , Image3.Picture.Birmap.Canvas , brect...);
kopiert Image3 auf Die Form1 und zwar von brect auf arect... Einfach mal ausprobieren...
Ach ja, für den Fall das ich nicht erklären kann

Hier:
http://www.delphi-treff.de/tipps/object ... he-arrays/" onclick="window.open(this.href);return false;
Code: Alles auswählen
Signatur := nil;
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: procedure selbst erstellen
Eine Sehr schöne Erklärung. Ich habe noch keine bessere gesehen.Ach ja, für den Fall das ich nicht erklären kann
MFG
Michael Springwald
Michael Springwald
Re: procedure selbst erstellen
ich glaube ich hab das verstenden...
ich verstehe bkloß nicht wo das jetzt gezeichnet wird?
und das mit den bildern auf die form zeichnen... hä?
ich hätte gerne mal etwas zum angucken ^^ so damit ich verstehe was ich eig programmiere
ich verstehe bkloß nicht wo das jetzt gezeichnet wird?
und das mit den bildern auf die form zeichnen... hä?
ich hätte gerne mal etwas zum angucken ^^ so damit ich verstehe was ich eig programmiere
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: procedure selbst erstellen
Schau dir einfach mal mein Code an. Da hast du was zum Anschauen. Ist sogar Jugendfrei. (Meines Wissens).ich hätte gerne mal etwas zum angucken ^^ so damit ich verstehe was ich eig programmiere
Aber, hier ein kleines Beispiel:
Ich gehe davon aus, dass die Position im Array gespeichert wird als TPoint
Code: Alles auswählen
procedure Paint;
var
i:integer;
begin
// Sollte nicht gemacht werden, wie es anders geht siehst du in meinem Code, oder bei unseren BreakOut Beispiel
Canvas.FillRect(0,0,Canvas.Widht,Canvas.height); // Wenn die Methode Paint in einem Timer aufgerufen wird, kann es sehr viel CPU-Zeit kosten. Ist dafür aber einfach. Für kleine Bildflächen dürfte es aber gehen.
for i:=0 to Lenght(MeinArray)-1 do begin
if i = 0 then begin// Kopf zeichnen
Canvas.Brush.Color:=clBlue; // Der Kopf wird Blau gezeichnet
end
else
Canvas.Brush.Color:=clRed; // Der Körper Rot.
Canvas.Fillrect(MeinArray[i].Left, MeinArray[i].Top,MeinArray[i].Left+20, MeinArray[i].Top+20);
end; // for i
end;
An sich ist das nicht weiter Problematisch.
ABER SCHAU DIR MAL BITTE MEIN CODE AN. DER BEANTWORTET VIELE, VIELE FRAGEN.
ps: Sorry das ich groß schreiben, aber mein Projekt-Beispiel, geht hier wohl unter sonst. Das Projekt habe ich genau für solche Zwecke geschrieben. Es soll als Beispiel dienen. Dort Zeichne ich auch nicht jede Sekunde den Kompletten Bildschirm neu sondern nur den Bereich der sich ändert.Das ist natürlich etwas aufwendiger, lohnt sich aber. Wenn du Fragen zum Code hast, kann ich dir gerne weiter helfen(oder auch andere).
MFG
Michael Springwald
Michael Springwald
Re: procedure selbst erstellen
pluto hat geschrieben:
ABER SCHAU DIR MAL BITTE MEIN CODE AN. DER BEANTWORTET VIELE, VIELE FRAGEN.
ps: Sorry das ich groß schreiben, aber mein Projekt-Beispiel, geht hier wohl unter sonst. Das Projekt habe ich genau für solche Zwecke geschrieben. Es soll als Beispiel dienen. Dort Zeichne ich auch nicht jede Sekunde den Kompletten Bildschirm neu sondern nur den Bereich der sich ändert.Das ist natürlich etwas aufwendiger, lohnt sich aber. Wenn du Fragen zum Code hast, kann ich dir gerne weiter helfen(oder auch andere).
leider verstehe ich kein bisschen was von deinem programm.
kann man das nicht einfach mit meinen images machen?
sodass die immer nachrücken auf die Posi von dem vorhergehenden körperteil
ich müsste doch meinen kompletten code umschreiben wenn ich das nun aufeinmal mit canvas und lines usw. machen wollte
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: procedure selbst erstellen
Es geht alles. Versuch es doch einfach mal. Ich helfe dir gerne weiter, wenn ich kann. images sind dafür nicht geeignet. Oder würdest du nach USA schwimmen wollen? Gehen würde es bestimmt. Nur dir würde vorher die Kraft ausgehen. *G*.kann man das nicht einfach mit meinen images machen?
Images sind für kleine Grafiken gedacht, die sich nicht ändern. Z.B. um ein Programm Grafisch zu verschönern. Nicht das man damit Spiele schreibt.
Einer (meiner) Grund-Regeln lautet: Lerne anderen Code zu verstehen. Klappt natürlich nicht immer. Andere Code können wahre Gold Gruben sein an Ideen und Möglichkeiten.
Selbst als Anfänger, dürfte es nicht weiter schwer Fallen. Ohne alles zu verstehen. Du kannst ja auch Geld Abheben, ohne zu verstehen, wie die Technik dahinter Funktioniert. Du kannst auch einkaufen gehen, ohne zuwissen, wie die einzelne Waren hier her gebracht wurde oder was sie alles gesehen haben. oder? Das mag etwas Hart klingen, aber so ist das nun mal.
Vielleicht findest du ja einen, der auf deinen Code eingeht, der nicht meiner Meinung ist. Ich habe dir ja noch ein Beispiel-code Geschrieben in meiner Letzten Antwort. Denn kannst du natürlich auch umschreiben, das der für Timage-Komponenten geht. Ist das gleiche. Geh das Beispiel mal durch. Du wirst sehen, der Code ist Anpassungs Fähig. es ist immer das gleiche. Auf Canvas verwendest du X und Y. Die Komponenten verwenden dafür Left und Top.
MFG
Michael Springwald
Michael Springwald
Re: procedure selbst erstellen
vielen dank für diesen hilfreichen beitrag
das grundgerüst ist ja klar
z.b. image5.top=image1.top-15
image5.left=image1.left
dies eingefügt in einen timer und image5 verfolgt image1 immer auf senkrechter linie.
für die anderen richtungen ist ja auch klar, verschönert hab ich das noch mit einer variablen usw.
nun bei einer richtungsänderung bewegt sich die schlange wie eine stange,
also muss ich wenn eine richtungsänderung durhc einen buttonclick gemacht wird, eig bei diesem buttonclick eine procedure schreiben
die dafür sorgt das die images eines nach dem anderen "abbiegt"
nun das ist leider mein problem, wie kann man schreiben das an der posi wo image1 sich befunden hat als der button geklickt wurde, die folgenden images auch abbiegen?
geht das, bitte helft mir
das is ein project für die schule und das muss ich am freiag abgeben
das grundgerüst ist ja klar
z.b. image5.top=image1.top-15
image5.left=image1.left
dies eingefügt in einen timer und image5 verfolgt image1 immer auf senkrechter linie.
für die anderen richtungen ist ja auch klar, verschönert hab ich das noch mit einer variablen usw.
nun bei einer richtungsänderung bewegt sich die schlange wie eine stange,
also muss ich wenn eine richtungsänderung durhc einen buttonclick gemacht wird, eig bei diesem buttonclick eine procedure schreiben
die dafür sorgt das die images eines nach dem anderen "abbiegt"
nun das ist leider mein problem, wie kann man schreiben das an der posi wo image1 sich befunden hat als der button geklickt wurde, die folgenden images auch abbiegen?
geht das, bitte helft mir
das is ein project für die schule und das muss ich am freiag abgeben

-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: procedure selbst erstellen
So, als allerestes:
1. Ja Pluto's code ist kompliziert, ich hab gerade 2 Sekunden reingeschaut und mich erstmal von den Ganzen Klassen erschlagen lassen.
Aber hierzu kann man nur sagen wie Pluto auch meinte: Dir kann es egal sein wie die Klassen genau Intern arbeiten, ich weis ja auch nicht, wie Lazarus meine Nachricht umwandelt, diese dann an Windows schickt, welche bein Nächstenn Zeichnen in den Button eine Caption reinschreibt...
Aber der Code sieht Technich sehr sauber und korrekt aus, Objektorientiert ,u.s.w.
Klar, da es keine herleitung dazu gibt das ganze ziemlich ungewohnt vorkommt, aber dann muss man das Programm einfach mal durch gehen. Man startet das , schaut sich Form1Create (oder ähnliche) funktion an und geht den code durch... bei jeder verzweigung geht man mit, darum kommt man nicht.
2.
Images benutzt du wenn du ganz ganz einfache Spiele hast...
Alles was komplizierter ist (Pacman, Tetris, Snake ) zeichnet auf eine Sogenannte zeichenfläche, also ein Canvas (in englisch)...
Alles was och komplizierter ist benutzt 3D grafik.
3.
Nun eine kleine Erklärung:
Bis jetzt willst du belibig viele Images hin und herrücken und dann verschieben, stell dir also vor du schaust auf eine große Wand an welcher bilder hängen die du verschieben willst.
Alle diese Bilder besitzen eine Sogenannte Zeichenfläche, das ist das wo du mit deinem Paintprogramm draufgemalt hast, ein Viereck...
Diese Zeichenoberfläche bleibt bei dir ungenutzt, da die bilder an sich sich ja nicht ändern sonder nur verschieben...
Das was wir dir erklären wollen:
Schmeiß die Bilder von deiner wand runter, Hol dir ein Pinsel und zeichne auf die Wand selber...
Wieso ?
Du hast viel mehr Freiheit, außerdem kannst genau den gleichen Effekt (genau! den gleichen) erzielen wie mit einzelnen bildern...
Also , wie fängt man damit an:
a) Projekt speichern , neues Übungsprojekt machen.
b) erstell ein Timer und lass den jede sekunde zeichnen. // später machst du das anders , nur zum üben.
c) Schau dir Form1.Canvas an.
Das besitzt jede menge unterfunktionen, Die heinfachsten sind Line, Rectangle (ich konnte das noch nie richtig schreiben, sry
)
Und Probier das aus. eventuell googelst du mal nach anderen funktionen und wenn du dich damit auskennst gehts weiter...
4.
Der Bewegungsablauf steht schon hier in diesem Thema,
Heißt:
Die Schlange besteht auf n stücken,
Das nte wandert auf die Position von n-1;
das n-1 auf die von n-2;
das 2 auf die vom 1
das 1 auf die vom 0ten.
So Das ist auf jeden fall immer so !!!
Du musst jetzt nur noch das kopfstück steuern, geht das nach oben , nach unten, links, rechts ?
Beim Nächsten Durchgang rücken alle Stücke eins auf un du musst wieder nur den Kopf bewegen...
Zeichen solltest du am einfachsten erstmal ein Viereck, du kannst aber auch ein Kompliziertes Bild was du mit einem Bildbearbeitungs-programm, erstelt hast einfügen...
1. Ja Pluto's code ist kompliziert, ich hab gerade 2 Sekunden reingeschaut und mich erstmal von den Ganzen Klassen erschlagen lassen.
Aber hierzu kann man nur sagen wie Pluto auch meinte: Dir kann es egal sein wie die Klassen genau Intern arbeiten, ich weis ja auch nicht, wie Lazarus meine Nachricht umwandelt, diese dann an Windows schickt, welche bein Nächstenn Zeichnen in den Button eine Caption reinschreibt...
Aber der Code sieht Technich sehr sauber und korrekt aus, Objektorientiert ,u.s.w.
Klar, da es keine herleitung dazu gibt das ganze ziemlich ungewohnt vorkommt, aber dann muss man das Programm einfach mal durch gehen. Man startet das , schaut sich Form1Create (oder ähnliche) funktion an und geht den code durch... bei jeder verzweigung geht man mit, darum kommt man nicht.
2.
Images benutzt du wenn du ganz ganz einfache Spiele hast...
Alles was komplizierter ist (Pacman, Tetris, Snake ) zeichnet auf eine Sogenannte zeichenfläche, also ein Canvas (in englisch)...
Alles was och komplizierter ist benutzt 3D grafik.
3.
Nun eine kleine Erklärung:
Bis jetzt willst du belibig viele Images hin und herrücken und dann verschieben, stell dir also vor du schaust auf eine große Wand an welcher bilder hängen die du verschieben willst.
Alle diese Bilder besitzen eine Sogenannte Zeichenfläche, das ist das wo du mit deinem Paintprogramm draufgemalt hast, ein Viereck...
Diese Zeichenoberfläche bleibt bei dir ungenutzt, da die bilder an sich sich ja nicht ändern sonder nur verschieben...
Das was wir dir erklären wollen:
Schmeiß die Bilder von deiner wand runter, Hol dir ein Pinsel und zeichne auf die Wand selber...
Wieso ?
Du hast viel mehr Freiheit, außerdem kannst genau den gleichen Effekt (genau! den gleichen) erzielen wie mit einzelnen bildern...
Also , wie fängt man damit an:
a) Projekt speichern , neues Übungsprojekt machen.
b) erstell ein Timer und lass den jede sekunde zeichnen. // später machst du das anders , nur zum üben.
c) Schau dir Form1.Canvas an.
Das besitzt jede menge unterfunktionen, Die heinfachsten sind Line, Rectangle (ich konnte das noch nie richtig schreiben, sry

Und Probier das aus. eventuell googelst du mal nach anderen funktionen und wenn du dich damit auskennst gehts weiter...
4.
Der Bewegungsablauf steht schon hier in diesem Thema,
Code: Alles auswählen
var
i:integer;
begin
for i := high(s) downto 0 do // nur die 4 durch high ersetzt...
begin
s[i] := s[i-1];
end;
s[0] := s[0].x + 1;
end;
Die Schlange besteht auf n stücken,
Das nte wandert auf die Position von n-1;
das n-1 auf die von n-2;
das 2 auf die vom 1
das 1 auf die vom 0ten.
So Das ist auf jeden fall immer so !!!
Du musst jetzt nur noch das kopfstück steuern, geht das nach oben , nach unten, links, rechts ?
Beim Nächsten Durchgang rücken alle Stücke eins auf un du musst wieder nur den Kopf bewegen...
Zeichen solltest du am einfachsten erstmal ein Viereck, du kannst aber auch ein Kompliziertes Bild was du mit einem Bildbearbeitungs-programm, erstelt hast einfügen...
Code: Alles auswählen
Signatur := nil;