Entwickler-Ecke
Sonstiges (Delphi) - Snake spiel erstellen
Turbi - Mi 13.08.08 09:08
Titel: Snake spiel erstellen
Guten Tag :D
Ich hoffe ich nerve euch nicht, doch ich wollte euch mal fragen, wie man ein kleines Simples Snake spiel erstellt?
Mit diesn komischen openGL? Oder wie?
Bergmann89 - Mi 13.08.08 14:19
HI,
OpenGL is am anfang n bisl häftig. Ich hab das damals einfach auf ne Image gezeichnet...
Ich helf dir ma auf die Sprünge. Bevor man loslegt macht man sich gedanken wie man das Spiel aufbaut, bzw. was mann braucht. Man fängt dabei mit dem Wesentlichen an (also die Schlange an sich und nich der GameOver-Bildschirm :wink:) Also die Schlange besteht aus einzellnen Punkten (is am anfang das einfachste) da es mehrere Punkte sind bietet sich hier ein Array an. Da jeder Punkt der Schlange eine X- und eine Y_koordinate auf der Image hat brauchen wir also noch eon record für die x und y werte. Also wäre das in etwa unsere Schlange:
Delphi-Quelltext
1: 2:
| type TPoint = record x,y: Integer; end; var Snake: array of TPoint |
jetzt haben wir die Variable für die schlange. jetzt müssen wir beim start die Variablen initalisieren. Wir machen die schlange am anfang 5 Punkte lang und wollen sie auf einem 100x100 Punkte großen Feld in der Mitte platzieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure InitVariables; var i: Integer; begin SetLength(Snkae,5); for i := 0 to 4 do begin Snake[i].x := 50; Sanke[i].y := 48+i; end; end; |
so nun haben wir eine 5 Punkte lange schlange die sich auf der Mitte des Bilschirms befindet, aber wir sehen noch nix, deshalb müsssen wir uns überlegen, wie wir die schlnage nun auf die Image zeichnen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure RenderSnake; var i: Integer; begin Image.Canvas.Pen.Width := 5; for i := 0 to High(Snake) do begin Image.Canvas.MoveTo(Snake[i].x,Snake[i].y); Image.Canvas.LineTo(Snake[i].x,Snake[i].y+1); end; end; |
Jetzt is sollte die Schlange da sein. aber sie bewegt sich noch nich! also müssen wir die Punkte der schlange im Array weiter bewegen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure MoveSnake; begin for i := High(Snake) downto 1 do begin Snake[i].x := Snake[i-1].x; Snake[i].y := Snake[i-1].y; end; Snake[0].x := Snake[1].x; Snake[0].y := Snake[1].y-1; end; |
so das war erstma der anfang. ich mach am besten ma n kleines beispiel progg, was sich mit den Grundlagen beschäftigt.. meld mich wenn ich's fertsch hab...bis dann
MfG Bergmann.
Hidden - Mi 13.08.08 14:28
Hi,
Das mittel der Wahl ist definitiv eine
PAINTBOX, kein TImage(!!).
@Bergmann89: Bitte bring die Leute doch nicht noch auf den falschen Ansatz :roll: TImage ist für statische Bilder, auf TPaintBox zeichnet man, dazu ist sie da.
mfG,
Turbi - Mi 13.08.08 14:54
Titel: Danke
Vielen Dank an euch alle, das ihr mir so helft.
Und es ist echt voll nett von dir Bergmann, das du sogar ein Beispiel Programm erstellst.
So nun kapiere ich leider etws noch nicht (tut mir echt leid :oops: )
Also bei mir unterstreicht er immer die Worte:
-Snake
-x
-y
Ich habe mir schon etwas dabei gedacht, und zwar das ich diese Wörter noch irgendwo einfügen muss, damit er weiß was diese sein sollen.
Da habe ich gedacht das dieser Code dafür wichtig ist:
Delphi-Quelltext
1: 2:
| type TPoint = record x,y: Integer; end; var Snake: array of TPoint |
So nun weiß ich allerdings nicht, wo ich diesen Code einfügen soll :/ .
Und wo ich die anderen Cods einfügen soll, weiß ich auch nicht.
Ich habe es dann einfach so gemacht, und diesen Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure InitVariables; var i: Integer; begin SetLength(Snkae,5); for i := 0 to 4 do begin Snake[i].x := 50; Sanke[i].y := 48+i; end; end; |
In einem Button eingefügt...
Die anderen Codes habe ich einfach darunter eingefügt.
Eine Paintbox habe ich auch in die Mitte des Fensters eingefügt...
Es tut mir echt leid, und ich will euch auch nicht mehr nerven. Doch ich verstehs net so richtig auch wenn der Code schon da ist.
Moderiert von
Tino: Delphi-Tags hinzugefügt.
Turbi - Mi 13.08.08 15:11
Titel: Gefunden!
Ok so habe jetzt doch alles selbst mal ausprobiert, und habe alles hinbekommen. Naja fast alles, er unterstreicht mir nämlich bei dem Befehl:
Delphi-Quelltext
1: 2:
| TPoint = record x,y: Integer; end; |
Das Wort: record, und er unterstreicht das ; nach end, wieso?
Moderiert von
Tino: Delphi-Tags hinzugefügt.
Bergmann89 - Mi 13.08.08 15:25
So hab das Bsp.-Prog fertig...
@Hidden: sorry, weiß auch nich, was mich da geritten hat xD
@Turbi: erstma n kurzer tipp, wenn du Code in den beitrag schreiben willst ist oben unter "Bereiche" n Button "+" wennde da drauf klickst, dann schreibt er den ausgewählten Code auch als code ins Topic. So das Tino nich dauernt die Delpih-Tags rein machen muss^^
Und nun zum Prog. TPoint ist schon von Delphi vordeklariert, das brauchst du also nich extra machen! Der rest is im Bsp-Prog. alles gut beschrieben mit ausreichend Comments. Wenn's noch Fragen gibt, einfach posten..
MfG Bergmann.
Turbi - Mi 13.08.08 15:31
Titel: Vielen Dank!
Vielen Dank Bergmann! Du bist echt super nett!
Endlich weiß ich wies geht!
Vielen vielen Dank!
Eine Frage nurnoch:
Wofür ist der Timer da?
Bergmann89 - Mi 13.08.08 15:37
Der Timer wird alle 100ms ausgeführt und bewegt die schlange. wenn du die schneller bewegen willst sinfach das Intervall kleiner machen und großer, wenns langsamer gehen soll. einfach ma n bisl rum probieren, so lernt man am besten ^^
Turbi - Mi 13.08.08 15:58
Titel: Komisch
Komisch, ich habe gerade eine neue VLC Formularanwendung erstellt.
Danach habe ich dort den ganzen Code gelöscht.
Und dann habe ich den ganzen Code von deiner Unit1 Kopiert, und dort reinkopiert. Da ich noch andere Sachen usw. machen wollte.
Doch als ich es testen wollte, kahm dort zwar kein Fehler aber es war auf dem Fenster keine Schlange da, auch wenn ich eine Paintbox und einen Timer genaudie gleichen Sachen vom anderen Fenster ins neue Kopiere, wieso?
Übrigens:
Ich versuche es jetzt mal so hinzubekommen, das wenn die Schlange sich selbst berührt eine showmessage mit Game over oder soetwas kommt. :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!