![]() |
Snake programmieren/brauche Hilfe bei der bewegung
ich soll für die schule snake prgrammieren. leider haben wir nie gelernt wie man bewegung in die sache reinbringt. ich habe im internet geguckt aber nichts gefunden, was verständlich ist oder so war, dass man nicht den ganzen code wieder löschen muss. hier mal das, was ich bis jetzt habe.
Delphi-Quellcode:
tut mir leid wenn einige sachen nicht gut eingerückt sind :oops: wäre echt toll wenn mir jemand helfen könnte
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, pngimage, pngextra, pnglang, ExtCtrls, StdCtrls; type TForm2 = class(TForm) Image1: TImage; Timer1: TTimer; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Körper; procedure update; private { Private-Deklarationen } public { Public-Deklarationen } end; implementation var Form2: TForm2; TYPE Tfeld = record Bild: TImage; Name: String; End; var feld: array [1..17,1..13] of Tfeld; var x,y : integer; TYPE Tsnake = record x1 : integer; y1 : integer; end; var snake: array [1..12] of Tsnake; var Rrichtung: byte; {$R *.dfm} procedure init; var i : integer; begin i:=1; randomize; for x:=1 to 13 do begin; for y:=1 to 17 do begin; feld[x,y].Name := 'Gras'; feld[x,y].Bild := Timage.create(Form2); feld[x,y].Bild.parent := Form2; feld[x,y].Bild.top := x*50; feld[x,y].Bild.left := y*50; feld[x,y].Bild.Picture.LoadFromFile('images/gras.PNG'); end; end; for y:= 1 to 17 do begin; for x:=1 to 13 do begin; If (y = 1) or (y = 17) then begin; feld[x,y].Name := 'Wand'; feld[x,y].Bild := Timage.create(Form2); feld[x,y].Bild.parent := Form2; feld[x,y].Bild.top := x*50; feld[x,y].Bild.left := y*50; feld[x,y].Bild.Picture.LoadFromFile('images/wand-hoch.PNG') end; end; end; for x:= 1 to 13 do begin; for y:=1 to 17 do begin; If (x = 1)or(x = 13) then begin; feld[x,y].Name := 'Wand'; feld[x,y].Bild := Timage.create(Form2); feld[x,y].Bild.parent := Form2; feld[x,y].Bild.top := x*50; feld[x,y].Bild.left := y*50; feld[x,y].Bild.Picture.LoadFromFile('images/wand-breit.PNG') end; end; end; end; begin for x:=6 to 9 do begin y:=9; feld[x,y].Name := 'Snake-Körper'; feld[x,y].Bild := Timage.create(Form2); feld[x,y].Bild.parent := Form2; feld[x,y].Bild.top := x*50; feld[x,y].Bild.left := y*50; feld[x,y].Bild.Picture.LoadFromFile('images/körper.PNG'); snake[i].x1:=x; snake[i].y1:=y; i:=i+1; end; x:= random(14)+2; y:= random(10)+2; begin feld[x,y].Name := 'Apfel'; feld[x,y].Bild := Timage.create(Form2); feld[x,y].Bild.parent := Form2; feld[x,y].Bild.top := x*50; feld[x,y].Bild.left := y*50; feld[x,y].Bild.Picture.LoadFromFile('images/apfel.PNG'); end; x:=0; y:=0; end; procedure TForm2.FormCreate(Sender: TObject); begin Form2.DoubleBuffered:=True; init; end; end; procedure TForm2.Button1Click(Sender: TObject); begin Button1.Visible:=false; TForm2.Timer1Timer; end; end. |
AW: Snake programmieren/brauche Hilfe bei der bewegung
Die Erkenntnis (Einrückung) ist da, nur fehlt die Motivation?
Rücke es vernünftig ein, dann zeigen sich meistens schon ein paar Fehler, und dann schauen wir weiter. Und bitte auch überflüssige Leerzeilen (mehr als 1 ist immer zuviel) entfernen. EDIT (da der TE nicht in der Lage ist oder keine Motivation dazu hat, habe ich den Source zum Formatieren mal durch mein Delphi gejagt) Und schon sieht man auch gleich einen Fehler:
Delphi-Quellcode:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, pngimage, pngextra, pnglang, ExtCtrls, StdCtrls; type TForm2 = class( TForm ) Image1 : TImage; Timer1 : TTimer; Button1 : TButton; procedure FormCreate( Sender : TObject ); procedure Button1Click( Sender : TObject ); procedure Körper; procedure update; private { Private-Deklarationen } public { Public-Deklarationen } end; implementation var Form2 : TForm2; TYPE Tfeld = record Bild : TImage; Name : String; End; var feld : array [1 .. 17, 1 .. 13] of Tfeld; var x, y : integer; TYPE Tsnake = record x1 : integer; y1 : integer; end; var snake : array [1 .. 12] of Tsnake; var Rrichtung : byte; {$R *.dfm} procedure init; var i : integer; begin i := 1; randomize; for x := 1 to 13 do begin; for y := 1 to 17 do begin; feld[x, y].Name := 'Gras'; feld[x, y].Bild := TImage.create( Form2 ); feld[x, y].Bild.parent := Form2; feld[x, y].Bild.top := x * 50; feld[x, y].Bild.left := y * 50; feld[x, y].Bild.Picture.LoadFromFile( 'images/gras.PNG' ); end; end; for y := 1 to 17 do begin; for x := 1 to 13 do begin; If ( y = 1 ) or ( y = 17 ) then begin; feld[x, y].Name := 'Wand'; feld[x, y].Bild := TImage.create( Form2 ); feld[x, y].Bild.parent := Form2; feld[x, y].Bild.top := x * 50; feld[x, y].Bild.left := y * 50; feld[x, y].Bild.Picture.LoadFromFile( 'images/wand-hoch.PNG' ) end; end; end; for x := 1 to 13 do begin; for y := 1 to 17 do begin; If ( x = 1 ) or ( x = 13 ) then begin; feld[x, y].Name := 'Wand'; feld[x, y].Bild := TImage.create( Form2 ); feld[x, y].Bild.parent := Form2; feld[x, y].Bild.top := x * 50; feld[x, y].Bild.left := y * 50; feld[x, y].Bild.Picture.LoadFromFile( 'images/wand-breit.PNG' ) end; end; end; end; begin // ja, wozu soll das denn gehören? for x := 6 to 9 do begin y := 9; feld[x, y].Name := 'Snake-Körper'; feld[x, y].Bild := TImage.create( Form2 ); feld[x, y].Bild.parent := Form2; feld[x, y].Bild.top := x * 50; feld[x, y].Bild.left := y * 50; feld[x, y].Bild.Picture.LoadFromFile( 'images/körper.PNG' ); snake[i].x1 := x; snake[i].y1 := y; i := i + 1; end; x := random( 14 ) + 2; y := random( 10 ) + 2; begin feld[x, y].Name := 'Apfel'; feld[x, y].Bild := TImage.create( Form2 ); feld[x, y].Bild.parent := Form2; feld[x, y].Bild.top := x * 50; feld[x, y].Bild.left := y * 50; feld[x, y].Bild.Picture.LoadFromFile( 'images/apfel.PNG' ); end; x := 0; y := 0; end; procedure TForm2.FormCreate( Sender : TObject ); begin Form2.DoubleBuffered := True; init; end; end; procedure TForm2.Button1Click( Sender : TObject ); begin Button1.Visible := false; TForm2.Timer1Timer; end; end. |
AW: Snake programmieren/brauche Hilfe bei der bewegung
Zitat:
|
AW: Snake programmieren/brauche Hilfe bei der bewegung
Wo ist denn das Problem? Du hast schonmal einen Timer, du hast deine Schlangen, deren X- und Y-Position du kennst. Also musst du im Timer nur entsprechend die X- und / oder Y-Werte ändern, neu zeichnen lassen und schwupps ... IGORRR ES LÄÄÄBT! :mrgreen:[/QUOTE]
ja nur weiß ich nicht wie es machen soll, dass die schlange solange läuft bis man was anderes drückt :( |
AW: Snake programmieren/brauche Hilfe bei der bewegung
.. in onKeyUp Ereignis der Form festellen welche Taste gedrückt wurde.
(Eventuell KexyPreview auf true setzen) Pfeil nach rechts -> Laufrichtung der Schlnage nach rechts Pfeil nach links -> Laufrichtung der Schlange nach links ... In der execute Methode des Timers musst Du nun auf die Laufrichtung reagieren und entsprechend die X und Y Werte variieren. Grüße Klaus |
AW: Snake programmieren/brauche Hilfe bei der bewegung
Zu Anfang würd' ich vielleicht erst mal diese ganzen Bilder weglassen und die Schlange durch Kreise darstellen, insbesondere weil das etwas einfacher ist und weil du einige Bilder so erzeugst, daß du sie gar nicht mehr freigeben kannst.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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