Autor Beitrag
Turbi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22



BeitragVerfasst: Mi 13.08.08 09:08 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 409

Windows Vista
Delphi 2005 Personal, Delphi 7
BeitragVerfasst: Mi 13.08.08 09:24 
da ich die Suche benutzen kann, habe ich mal was für dich eingegeben und auch was gefunden:

www.delphi-forum.de/...amp;highlight=opengl

_________________
"Je mehr Käse, desto mehr Löcher; Je mehr Löcher, desto weniger Käse. Daraus folgt: Je mehr Käse desto weniger Käse!"
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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. und eventuell Suche nach Suche in der Entwickler-Ecke CANVAS

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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:

ausblenden 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:

ausblenden 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:

ausblenden 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:

ausblenden 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.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Turbi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22



BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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.
Einloggen, um Attachments anzusehen!
_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Turbi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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 ^^

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Turbi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22



BeitragVerfasst: 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