![]() |
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:
[edit=Luckie]Delphi-Tags eingefügt. beim nächsten mal bitte selber machen. Mfg, Luckie[/edit]
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. ok werde es dann machen;) |
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. |
Re: Programmcode von Snake in Delphi
ok dann weiß ich das fürs nächste mal. Fehlermeldung kommt sofort
|
Re: Programmcode von Snake in Delphi
Welche Deklaration und was heißt "meckern"? Mein Delphi gibt Fehlermeldungen aus, kann aber nicht meckern.
|
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. |
Re: Programmcode von Snake in Delphi
Luckie: Quellcode entfernt.
also er nimmt die Variablen nicht an
Delphi-Quellcode:
irgend was mit dem , hat er
tapfel = class
x,y,r,score:integer; [edit=Luckie]Quellcode siehe oben. Mfg, Luckie[/edit] |
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?
|
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
|
Re: Programmcode von Snake in Delphi
Weil du Sie (die Variablen) doppelt verwendest!
Delphi-Quellcode:
versuchs mal mit
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;
Delphi-Quellcode:
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 ;)
tapfel = class
x,y,r,score:integer; overload; farbe:tcolor; overload; |
Re: Programmcode von Snake in Delphi
mal ne andere Frage. Hat Delphi 7 Probleme mit Windwos Vista?
|
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 |
Re: Programmcode von Snake in Delphi
Zitat:
EDIT: ![]() |
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 |
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 |
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 |
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.
|
Re: Programmcode von Snake in Delphi
die fehlermeldung steht doch oben drüber
|
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:
auch wenn ich kaum glaube das es daran liegt.
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; Edit: Nur mal so nebenbei bemerkt, der jenige, der diesen Code geschrieben hat, hat nicht so wirklich Ahnung von OOP. |
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 ?
![]() 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. |
Re: Programmcode von Snake in Delphi
cool thx
|
Re: Programmcode von Snake in Delphi
leider ging das andere mit der anderen Deklaration nicht:(
|
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:
statt
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;
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; |
Re: Programmcode von Snake in Delphi
Zitat:
![]() 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: ![]() Und ja, es ist keine große Kunst, ohne vorheriges probieren und verstehen den Code herunterzuladen. Also denke gar nicht erst dran. :roll: |
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. |
Re: Programmcode von Snake in Delphi
Mal ein Vorschlag für die Objekt Struktur:
Delphi-Quellcode:
achja: Die Schlange sollte in einer Liste verwaltet werde. und in zwei Objekte geliert werden:
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) .... 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