Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Programmcode von Snake in Delphi (https://www.delphipraxis.net/129099-programmcode-von-snake-delphi.html)

Apona 12. Feb 2009 16:13


Programmcode von Snake in Delphi
 
Hier ist der Programmcode von dem Snake. ( Habe Ihn per google gefunden). Ich habe keine Idee warum er bei der Deklaration mosert

Delphi-Quellcode:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  Trichtung = (Hoch,Runter,Links,Rechts);
 
  TSpielfeld = class(TForm)
    Bild: TImage;
    Timer1: TTimer;
    Panel1: TPanel;
    Label1: TLabel;
    m_start: TMemo;
    l_start: TLabel;
    b_start: TButton;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure b_startClick(Sender: TObject);
    end;
 
 tsnake = class
  x,y:array[1..100] of integer;
  vx,vy,r,laenge:integer;
  farbe:tcolor;
  richtung:trichtung;
  procedure init(fneu:tcolor; xneu, yneu, vxneu, vyneu, rneu:integer);
  procedure zeigedich;
  procedure bewegedich;
  procedure wachsen;
  end;
 
 tapfel = class
  x,y,r,score:integer;
  farbe:tcolor;
  procedure ini; overload;
  procedure ini(fneu:tcolor; xneu, yneu, rneu:integer); overload;
  procedure zeigediche;
  procedure fressen;
  end;
 
 
var
  Spielfeld: TSpielfeld;
   snake   : Tsnake;
   apfel   : Tapfel;
   big     : bool;
implementation
 
{$R *.dfm}
 
 
// -------------------------------------------------------------------------- //
// alle Prozeduren, die ausschließlich mit "Snake" zu tun haben
// -------------------------------------------------------------------------- //
procedure tsnake.init(fneu:tcolor; xneu, yneu, vxneu, vyneu, rneu:integer);
begin
  laenge:= 1;
  farbe:= fneu;
  x[laenge]   := xneu;
  y[laenge]   := yneu;
  vx  := vxneu;
  vy  := vyneu;
  r   := rneu;
 
end;
 
procedure tsnake.zeigedich;
var i:integer;
begin
  Spielfeld.Bild.Canvas.Brush.Color:=Farbe;
  for i:=1 to snake.laenge do
  begin
  Spielfeld.Bild.Canvas.Rectangle(x[i], y[i], x[i]+2*r, y[i]+2*r);
  end;
end;
 
procedure tsnake.bewegedich;
begin
 
  case snake.richtung of
  Links: begin //Links
    snake.vx:=-1;
    snake.vy:= 0;
    end;
 
Hoch: begin //Hoch
    snake.vx:= 0;
    snake.vy:= -1;
    end;
 
Rechts: begin //Rechts
    snake.vx:= 1;
    snake.vy:= 0;
    end;
 
Runter: begin //Runter
    snake.vx:= 0;
    snake.vy:= 1;
    end;
  end;
 
  //Bewegungsberechnung
  x[1] := x[1] + 2*r*vx;
  y[1] := y[1] + 2*r*vy;
 
  if (x[1]>Spielfeld.Bild.Width-2*r) then
  begin
    x[1] := 0;
  end;
 
  if x[1]<0 then
  begin
    x[1] := Spielfeld.Bild.Width-2*r;
   end;
 
  if (y[1] > Spielfeld.Bild.Height-2*r) then
  begin
    y[1] := 0;
  end;
 
  if y[1] < 0 then
  begin
    y[1] := Spielfeld.Bild.Height-2*r;
  end;
 
end;
 
//wachsen
procedure Tsnake.wachsen;
var i:integer;
begin
laenge:= laenge +1;
spielfeld.Label2.Caption:='Länge : ' + inttostr(laenge);
//Array erweitern
for i:=1 to laenge do
  begin
  x[i+1]:=x[i];
  y[i+1]:=y[i];
  Spielfeld.Bild.Canvas.Rectangle(x[i], y[i], x[i]+2*r, y[i]+2*r);
 
 
  end;
end;
 
procedure TSpielfeld.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case key of
27:close;
 
37: begin //Links
    if snake.richtung <> Rechts then snake.richtung:=Links;
    end;
38: begin //Hoch
    if snake.richtung <> Runter then snake.richtung:=Hoch;
    end;
39: begin //Rechts
    if snake.richtung <> Links then snake.richtung:=Rechts;
    end;
40: begin //Runter
    if snake.richtung <> Hoch then snake.richtung:=Runter;
    end;
end;
end;
 
// -------------------------------------------------------------------------- //
// Alle Prozeduren, die ausschließlich mit "Apfel" zu tun haben
// -------------------------------------------------------------------------- //
 
procedure tapfel.ini;
begin
  farbe:= clGreen;
  x   := Random(30)*20;
  y   := Random(20)*20;
  r   := 10;
end;
 
procedure tapfel.ini(fneu:tcolor; xneu, yneu, rneu:integer);
begin                                      //
  farbe:= fneu;
  x   := xneu;
  y   := yneu;
  r   := rneu;
end;
 
 
procedure tapfel.zeigediche;               //
begin
  Spielfeld.Bild.Canvas.Brush.Color:=clGreen;
  Spielfeld.Bild.Canvas.ellipse(x, y, x+2*r, y+2*r);
end;
 
procedure tapfel.fressen;
begin
 
if (x = snake.x[1]) and (y = snake.y[1]) then
 
    begin
      score:= score +1;
      spielfeld.label1.caption:='Score : ' + inttostr(score);
      apfel.zeigediche;
      apfel.ini;
      apfel.zeigediche;
      big:= true;
    end;
end;
// -------------------------------------------------------------------------- //
// Durch diese Prozedur wird das Spiel gestartet und der Anfangsbildschirm ausgeblendet
// -------------------------------------------------------------------------- //
procedure TSpielfeld.b_startClick(Sender: TObject);
begin
l_start.Visible:=false;
b_start.Visible:=false;
m_start.Visible:=false;
panel1.Visible:=true;
bild.Visible:=true;
end;
 
// -------------------------------------------------------------------------- //
// Diese Prozedur bringt die Bewegungs- und Fressprozeduren in Gang(regelmäßig
// -------------------------------------------------------------------------- //
 
procedure TSpielfeld.Timer1Timer(Sender: TObject);
begin
//spielfeld.Timer1.Enabled:=false;
 
                   //
snake.zeigedich;
snake.bewegedich;
snake.zeigedich;
apfel.fressen;
if big = true then
begin
snake.wachsen;
big:= false;
end;
//spielfeld.Timer1.Enabled:=true;
end;
 
// -------------------------------------------------------------------------- //
// Alles was von Anfang an existieren soll ist hier aufgeführt
// -------------------------------------------------------------------------- //
 
procedure TSpielfeld.FormCreate(Sender: TObject);
begin                               //
  with bild.Canvas do
  begin
  pen.Width:=5;
  Brush.Color:=clWhite;
  Brush.Style:=bsSolid;
  Pen.Width:=2;
  Pen.Mode:=pmNOTXOR;
 
  Rectangle(0,0,Bild.width,Bild.Height);
  end;
 
  snake.init(clRed, Random(30)*20, Random(20)*20,0,0,10);
  snake.zeigedich;
  apfel.ini;
  apfel.zeigediche;
end;
 
initialization                     //
  randomize;
  snake := tsnake.Create;
  apfel := tapfel.Create;
  big:= false;
end.
[edit=Luckie]Delphi-Tags eingefügt. beim nächsten mal bitte selber machen. Mfg, Luckie[/edit]


ok werde es dann machen;)

Mithrandir 12. Feb 2009 16:15

Re: Programmcode von Snake in Delphi
 
Ok,

Grundsätzlich gehören Quellcodes in -Tags. Dann werden so große Listings meist als *.pas-Datei angehängt. Und dann fehlt noch die Fehlermeldung. Die Glaskugel hat heute frei.

Apona 12. Feb 2009 16:16

Re: Programmcode von Snake in Delphi
 
ok dann weiß ich das fürs nächste mal. Fehlermeldung kommt sofort

Luckie 12. Feb 2009 16:16

Re: Programmcode von Snake in Delphi
 
Welche Deklaration und was heißt "meckern"? Mein Delphi gibt Fehlermeldungen aus, kann aber nicht meckern.

Mithrandir 12. Feb 2009 16:20

Re: Programmcode von Snake in Delphi
 
@Luckie: ;)

@Apona: Denk auch daran, dass du bei jedem deiner Beiträge einen Button namens "Edit" hast. Der ist nicht nur zur Zierde, sondern dient dazu, Informationen zu deinen Beiträgen nachträglich hinzuzufügen. Das ist hier kein Chat.

Apona 12. Feb 2009 16:25

Re: Programmcode von Snake in Delphi
 
Luckie: Quellcode entfernt.

also er nimmt die Variablen nicht an

Delphi-Quellcode:
tapfel = class
  x,y,r,score:integer;
irgend was mit dem , hat er

[edit=Luckie]Quellcode siehe oben. Mfg, Luckie[/edit]

Luckie 12. Feb 2009 16:32

Re: Programmcode von Snake in Delphi
 
Warum um Gottes Willen noch mal die 300 Zeilen Code? Und was heißt "nimmt nicht an"? Es kann doch nicht so schwer sein die genaue Fehlermeldung von Delphi hier rein zu kopieren?

Apona 12. Feb 2009 16:33

Re: Programmcode von Snake in Delphi
 
das mit dem Code tut mir leid, wollte den Beitrag eigendlich editieren. Der Fehlercode kommt. Musste Delphi eben schnell neuinstalieren. 2 Mins noch bitte

BullsEye 12. Feb 2009 16:34

Re: Programmcode von Snake in Delphi
 
Weil du Sie (die Variablen) doppelt verwendest!

Delphi-Quellcode:
tsnake = class
  x,y:array[1..100] of integer;
  vx,vy,r,laenge:integer;
  farbe:tcolor;
...

tapfel = class
  x,y,r,score:integer;
  farbe:tcolor;
versuchs mal mit


Delphi-Quellcode:
tapfel = class
  x,y,r,score:integer; overload;
  farbe:tcolor; overload;
Bin mir da aber gerade nicht ganz sicher. Achso, du brauchst nicht jedes Mal zu schreibene, das wir noch 2 Minuten warten sollen, Antworte einfach 2 Minuten später ;)

Apona 12. Feb 2009 16:50

Re: Programmcode von Snake in Delphi
 
mal ne andere Frage. Hat Delphi 7 Probleme mit Windwos Vista?

p80286 12. Feb 2009 17:12

Re: Programmcode von Snake in Delphi
 
nur mit den help-files.
aber da gibts eine Möglichkeit was nach zu installieren, such mal bei MS nach winhlp32.

Gruß K-H

mr_emre_d 12. Feb 2009 18:25

Re: Programmcode von Snake in Delphi
 
Zitat:

Zitat von BullsEye
Weil du Sie (die Variablen) doppelt verwendest!

Ähm... Ich verweise hiermit auf die Delphi-Grundlagen-Tutorials :P:P

EDIT:
http://www.delphi-treff.de/tutorials/grundlagen/

Apona 13. Feb 2009 14:08

Re: Programmcode von Snake in Delphi
 
so habe das mit dem Overload; hinter der Deklaration mal gemacht bringt aber leider nichts.


Es kommt Folgende Fehlermeldung:

Expected ':' but ',' found

fkerber 13. Feb 2009 14:13

Re: Programmcode von Snake in Delphi
 
Hi!

Verrätst du uns noch eine Zeilennummer oder noch besser nochmal kurz die Codestelle (nur die, wo es knallt)?


Ciao, Frederic

Apona 13. Feb 2009 14:17

Re: Programmcode von Snake in Delphi
 
Also hier knallt es:


Delphi-Quellcode:

tsnake = class
  x,y:array[1..100] of integer; hinter dem x,
  vx,vy,r,laenge:integer;
  farbe:tcolor;
...

tapfel = class
  x,y,r,score:integer; auch hier hinter dem x,
  farbe:tcolor;



Danke schon mal für eure Hilfe

hugo1990 13. Feb 2009 17:57

Re: Programmcode von Snake in Delphi
 
Es wäre vllt, mal ganz gut gewesen, wenn du die detailierte Fehlermeldung mit dazugeschrieben hättest, da ich dir auch gerne helfen würde, aber ich habe keine Lust mir das Projekt selber zusammen zu basteln, da du die Projektdateien an deinen Beitrag ja auch nicht angehangen hast.

Apona 13. Feb 2009 18:04

Re: Programmcode von Snake in Delphi
 
die fehlermeldung steht doch oben drüber

hugo1990 13. Feb 2009 18:12

Re: Programmcode von Snake in Delphi
 
Oh, sorry. Muss ich irgendwie überlesen haben.
Also ich habe mir jetzt die Klassen mal schnell in ein Projekt kopiert und dass kompiliert, aber bei mir tritt da kein Fehler auf. Ich habe aber auch nicht Delphi 7.
Du könntest ja mal folgendes versuchen:
Delphi-Quellcode:
tsnake = class
  x:array[1..100] of integer;
  y:array[1..100] of integer;
  vx,vy,r,laenge:integer;
  farbe:tcolor;
  richtung:trichtung;
  procedure init(fneu:tcolor; xneu, yneu, vxneu, vyneu, rneu:integer);
  procedure zeigedich;
  procedure bewegedich;
  procedure wachsen;
  end;

tapfel = class
  x:integer;
  y:integer;
  r:integer;
  score:integer;
  farbe:tcolor;
  procedure ini; overload;
  procedure ini(fneu:tcolor; xneu, yneu, rneu:integer); overload;
  procedure zeigediche;
  procedure fressen;
  end;
auch wenn ich kaum glaube das es daran liegt.

Edit:
Nur mal so nebenbei bemerkt, der jenige, der diesen Code geschrieben hat, hat nicht so wirklich Ahnung von OOP.

mimi 13. Feb 2009 19:45

Re: Programmcode von Snake in Delphi
 
ich hatte mal vor einiger Zeit ein Tutorial für Snake geschrieben. Allerdings mit DelphiX Unterstützung. Aber ich denke als "Anhaltspunkt" zum reinschauen und anpassen sollte das doch ausreichen oder ?
http://www.delphi-library.de/viewtop...=10073&start=0

PS:
Ich habe das Tutorial hier nicht gefunden, kann sein das ich es hier nicht erstellt habe, aber wenn ihr wollt kann ich das noch nachholen. Ich habe auch noch erst letzten ein Snake mit Canvas mit Hilfe meiner 2D Engine und meinem "Game Pack" erstellt.

Apona 16. Feb 2009 14:12

Re: Programmcode von Snake in Delphi
 
cool thx

Apona 16. Feb 2009 14:52

Re: Programmcode von Snake in Delphi
 
leider ging das andere mit der anderen Deklaration nicht:(

Jakob Ullmann 16. Feb 2009 16:10

Re: Programmcode von Snake in Delphi
 
Wo hast du eigentlich den Quelltext her? Und heißt deine Form (Form.Name :mrgreen: ) wirklich Spielfeld, bzw. ist sie (bei var) noch als TForm1 oder als TSpielfeld deklariert? Das war nämlich das erste, was mir aufgefallen ist.

Und zur Klassendeklaration: Versuch's mal mit:

Delphi-Quellcode:
tsnake = class
  public
    x,y:array[1..100] of integer;
    vx,vy,r,laenge:integer;
    farbe:tcolor;
    ...

tapfel = class
  public
    x,y,r,score:integer;
    farbe:tcolor;
statt

Delphi-Quellcode:
tsnake = class
  x,y:array[1..100] of integer;
  vx,vy,r,laenge:integer;
  farbe:tcolor;
...

tapfel = class
  x,y,r,score:integer;
  farbe:tcolor;

Mithrandir 16. Feb 2009 16:18

Re: Programmcode von Snake in Delphi
 
Zitat:

Zitat von Jakob Ullmann
Wo hast du eigentlich den Quelltext her?

Nach nichtmal 5 Minuten Google: http://www.easy-coding.de/delphi-snake-t910.html

Der TE hat vermutlich einfach den erstbesten Code genommen und hier reinkopiert. Ziemlich dreist. So kann man jedenfalls keine Programme schreiben, auf die man stolz sein könnte.

//Edit: Wenn du ein ernsthaftes Interesse daran hast, dann hat Pr0g hier in der DP auch ein Tutorial veröffentlicht: http://www.delphipraxis.net/internal...ct.php?t=26245

Und ja, es ist keine große Kunst, ohne vorheriges probieren und verstehen den Code herunterzuladen. Also denke gar nicht erst dran. :roll:

Apona 16. Feb 2009 16:56

Re: Programmcode von Snake in Delphi
 
Ich habe aber in dem vorherigen Thread geschrieben das ich nicht viel Ahnung von Delphi habe. Habe auch geschrieben das ich den Code per google gefunden habe. Das mit dem Tutorial habe ich mir auch schon durch gelesen.


Naja habe das Programm zwar zum Laufen bekommen aber es ist nicht das wahre. Habe nun einen anderen Code. Das Programm ist soweit auch funktionsfähig. Leider klapt die Steuerung noch nicht so recht.

mimi 16. Feb 2009 20:21

Re: Programmcode von Snake in Delphi
 
Mal ein Vorschlag für die Objekt Struktur:
Delphi-Quellcode:
TBaseObj = class
x,y:Integer
bmp:TBitmap // Ich weiß nicht wo mit du dein Snkae machst, mit Canvas ? mit openGL ?
....

TSnake = class(TbaseObj)
.....

TTafel = class(TBaseObj)
....
achja: Die Schlange sollte in einer Liste verwaltet werde. und in zwei Objekte geliert werden:
den Kopf und den Körper.

So würde das schon mehr nach dem OOP Prinzip gehen. Was für Probleme hast du denn mit der Steuerung ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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