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?


Hack Gott - Mi 13.08.08 09:24

da ich die Suche benutzen kann, habe ich mal was für dich eingegeben und auch was gefunden:

http://www.delphi-forum.de/viewtopic.php?t=74564&highlight=opengl


Hidden - Mi 13.08.08 13:18

Hi,

Mit OpenGl hatten wir Snake schonmal: Suche in der Entwickler-Ecke SNAKE3D, war interessant. Kannst ja von dort ein paar ideen suchen. Oder aber du lädst es runter, proggst was anderes und wir freuen uns über Vielfalt ;)

Edit: Ich weiß ja nicht, wie lange du schon programmierst. Solltest du noch nciht so lange coden: Crashkurs von Christian S. [http://www.christian-stelzmann.de/artikel/CrashkursReloaded/] und eventuell Suche nach Suche in der Entwickler-Ecke CANVAS

mfG,


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);   //schlangenlänge auf 5 setzten
  for i := 0 to 4 do    //von 0. bis zum 4. element durchzählen
    begin
      Snake[i].x := 50;   //X-Wert festlegen
      Sanke[i].y := 48+i; //Y-Wert festlegen
    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 //vom 1. bis zum letzten element durchzählen
    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 //von letzen bis zum 2. Element zählen
    begin
      Snake[i].x := Snake[i-1].x; //X Position ein nachrutschen
      Snake[i].y := Snake[i-1].y; //Y Position ein nachrutschen
    end;
  Snake[0].x := Snake[1].x;
  Snake[0].y := Snake[1].y-1//1. Element eins höher setzten
  //wenn ich eine andere Richting bewegt werden soll einfach einen anderen Punkt berechnen!
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 Suche in der Entwickler-Ecke 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);   //schlangenlänge auf 5 setzten
  for i := 0 to 4 do    //von 0. bis zum 4. element durchzählen
    begin
      Snake[i].x := 50;   //X-Wert festlegen
      Sanke[i].y := 48+i; //Y-Wert festlegen
    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 user profile iconTino: 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 user profile iconTino: 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