![]() |
Re: Snake (das Spiel)
hi,
zur Mittagszeit ging der Download auch nicht, schade, kannst das noch mal ändern? Gruß Yadon |
Re: Snake (das Spiel)
Auch noch mein Senf dazu : Das in einem Tutorial guter Programmierstil vorkommen sollte mag ja schon stimmen, aber wenn man dieses Tutorial als Denkanstoß für sein eigenes Snake spiel nehmen möchte ist es gut! Es geht ja in erster Linie darum, zu sehen, wie man das Snakespil umsetzen kann, und mit dieser Idee geht man dann an sein eigenes Spiel ran und schreibt seinen eigenen Code , wenn möglich dann auch in gutem Stil. Aber als Bsp. für eine Realisierung des Snakespiels finde ich dieses Turoial echt gut! :thumb:
|
Re: Snake (das Spiel)
Liste der Anhänge anzeigen (Anzahl: 1)
Mal eine ganz dumme Frage eines Anfängers *g*
Ich hab mal versucht das Programm nachzubasteln, compilieren tut er das auch noch, nur laufen will es nicht ordnungsgemäß. Hat irgeneiner von euch Profis einen Tipp für mich? Leider ist ja das Bsp. Programm nicht mehr zum downloadverfügbar, damit ich mal selbst nach dem Fehler suchen könnte. Aus irgendeinem Grund bewegt sich die Schlange nicht :( Hier auch nochmal der Soure:
Delphi-Quellcode:
unit snake;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; const farben: Array [0..2] of TColor = (clBlack, clLime, clRed); raster: integer = 10; breite: integer = 24; hoehe: integer = 24; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Timer1: TTimer; PaintBox1: TPaintBox; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } map: Array [0..24] of Array [0..24] of Integer; kopf, richtung, futter: TPoint; laenge, punkte: Integer; ende: Boolean; bmp: TBitmap; procedure enable_buttons(status: Boolean); procedure spiel_ende; procedure neues_futter; procedure paint_map; procedure calc_snake; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.enable_buttons(status: Boolean); begin Button2.Enabled := status; Button3.Enabled := status; Button4.Enabled := status; Button5.Enabled := status; end; procedure TForm1.spiel_ende; begin ende:= True; Timer1.Enabled := False; enable_buttons(False); Button1.Enabled := True; end; procedure TForm1.neues_futter; begin futter := Point(Random(breite), Random(hoehe)); while map[futter.X, futter.Y]<>0 do futter:= Point(Random(breite), Random(hoehe)); map[futter.X,futter.Y] := -1; end; procedure TForm1.paint_map; var i,j: integer; col:TColor; begin for i := 0 to breite do for j := 0 to hoehe do begin case map[i, j] of -1: col := farben[1]; 0: col := farben[0]; else col := farben[2]; end; PaintBox1.Canvas.Brush.Color:=col; PaintBox1.Canvas.FillRect(Rect(i*raster, j*raster, (i+1)*raster, (j+1)*raster)); end; end; procedure TForm1.calc_snake; var i,j: Integer; begin for i := 0 to breite do for j := 0 to hoehe do if map[i,j]>0 then Dec(map[i,j]); Inc(kopf.X, richtung.X); Inc(kopf.Y, richtung.Y); if (kopf.X<0) or (kopf.X>breite) or (kopf.Y<0) or (kopf.Y>hoehe) then begin spiel_ende; ShowMessage('Sie haben den Rand berührt!'); end; if (map[kopf.X, kopf.Y]>0) and (not ende) then begin spiel_ende; ShowMessage('Sie haben sich selbst gebissen!'); end; if (kopf.X=futter.X) and (kopf.Y=futter.Y) then begin Inc(laenge); neues_futter; end; map[kopf.X, kopf.Y] := laenge; end; procedure TForm1.Button1Click(Sender: TObject); var i,j: Integer; begin Button1.Enabled := False; for i:=0 to breite do for j:=0 to hoehe do map[i,j] := 0; kopf:= Point(1,1); laenge:= 5; richtung:= Point(0,1); map[kopf.X,kopf.Y] := laenge; neues_futter; paint_map; enable_buttons(True); end; procedure TForm1.Timer1Timer(Sender: TObject); begin calc_snake; if not ende then paint_map; end; procedure TForm1.Button2Click(Sender: TObject); begin if richtung.Y=0 then richtung :=Point(0,-1); end; procedure TForm1.Button3Click(Sender: TObject); begin if richtung.X=0 then richtung:=point(-1,0); end; procedure TForm1.Button4Click(Sender: TObject); begin if richtung.X=0 then richtung:=Point(1,0); end; procedure TForm1.Button5Click(Sender: TObject); begin if richtung.Y=0 then richtung:= Point(0,1); end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; end. |
Re: Snake (das Spiel)
Die Subdomain hat sich verändert, daher ist der Beispielcode nun hier zu finden:
![]() Ersetz mal den Code von "Button1Click" durch folgenden:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, j: Integer; begin Button1.Enabled := False; for i:=0 to breite do for j:=0 to hoehe do map[i, j] := 0; kopf := Point(1, 1); laenge := 5; richtung := Point(0, 1); map[kopf.X, kopf.Y] := laenge; neues_futter; paint_map; enable_buttons(True); ende := False; Timer1.Enabled := True; end; |
Re: Snake (das Spiel)
thx, jetzt geht es :) :)
|
Re: Snake (das Spiel)
also wenn ich den quellcode eingebe dann geht alles, d.h. die schlange flitzt über die paintbox nur kann ich die richtungsänderung nicht eingeben.
Die "If"-Abfrage vor dem Setzen der neuen Richtung ist dazu da um einen direkten Richtungswechsel zu verhindern. So ist es bspw. nicht Möglich während man nach unten läuft die Richtung nach oben zu ändern. "Button3" bekommt die Caption "links" und folgenden Code: Quellcode: markieren
Delphi-Quellcode:
Wenn ich da auf den Button3 klicke um den Quelltext einzutragen dann kommt ne meldung:
...
procedure TForm1.Button3Click(Sender: TObject); begin if richtung.X=0 then richtung := Point(-1, 0); end; ... "cannot find implementation of method3click Da weiß ich nimmer weiter. Nur zur Info falls einer ne Lösung weiß ich bin n totaler Noob und hab nur alles genau abgeschrieben wie es im tutorial stand bitte schreibts einfach *g* danke [edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] |
Re: Snake (das Spiel)
Am besten wäre es, wenn du nur den Button3 auf deine Form machst, dann Doppelklickt drauf, damit Delphi die Prozedur erstellt und du dann den Code einträgst. Wenn du die ganze Prozedur kopiert hast, musst du gucken, ob sie auch oben in TForm1 eingetragen wurde und sie über den OI dem Button zuweisen.
MfG Pr0g |
Re: Snake (das Spiel)
Hiermit kann man dann auch die Pfeiltasten zur Steuerung benutzen:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin case Key of VK_UP: Button2.Click; VK_DOWN: Button5.Click; VK_RIGHT: Button4.Click; VK_LEFT: Button3.Click; end; end; |
Re: Snake (das Spiel)
Also ich habe noch eine gute erweiterung des Codes. So kann man auch durch wände gehen wie im richtigen Snake.
Delphi-Quellcode:
Das muss man einfach in calc_snake reinschreiben.
if (kopf.X<0) then
Kopf.X:= kopf.X + Breite + 1; if Kopf.Y < 0 then Kopf.Y := kopf.Y + Hoehe + 1; if Kopf.X > Breite then Kopf.X := Kopf.x - Breite - 1; if Kopf.Y > Hoehe then Kopf.Y := Kopf.Y - Hoehe - 1; Freundliche Grüsse Mars |
Re: Snake (das Spiel)
Schade, dass die Links ins Leere laufen... :(
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 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