AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Snake (das Spiel)
Tutorial durchsuchen
Ansicht
Themen-Optionen

Snake (das Spiel)

Ein Tutorial von Pr0g · begonnen am 25. Mai 2004 · letzter Beitrag vom 8. Mai 2018
Antwort Antwort
Seite 4 von 6   « Erste     234 56      
Yadon

Registriert seit: 13. Feb 2004
110 Beiträge
 
Delphi 5 Enterprise
 
#1

Re: Snake (das Spiel)

  Alt 26. Sep 2004, 11:02
hi,

zur Mittagszeit ging der Download auch nicht, schade, kannst das noch mal ändern?

Gruß Yadon
  Mit Zitat antworten Zitat
Benutzerbild von Wuaegner
Wuaegner

Registriert seit: 8. Feb 2004
406 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Snake (das Spiel)

  Alt 26. Sep 2004, 11:48
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!
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat
Airborn

Registriert seit: 12. Nov 2004
5 Beiträge
 
#3

Re: Snake (das Spiel)

  Alt 13. Nov 2004, 11:48
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.
Angehängte Dateien
Dateityp: zip snake_253.zip (3,4 KB, 117x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#4

Re: Snake (das Spiel)

  Alt 13. Nov 2004, 13:37
Die Subdomain hat sich verändert, daher ist der Beispielcode nun hier zu finden: http://pr0g.net/knowhow/files/snake_src.zip


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;
  Mit Zitat antworten Zitat
Airborn

Registriert seit: 12. Nov 2004
5 Beiträge
 
#5

Re: Snake (das Spiel)

  Alt 13. Nov 2004, 17:39
thx, jetzt geht es
  Mit Zitat antworten Zitat
profi

Registriert seit: 16. Dez 2004
1 Beiträge
 
#6

Re: Snake (das Spiel)

  Alt 27. Dez 2004, 21:56
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:
...
procedure TForm1.Button3Click(Sender: TObject);
begin
  if richtung.X=0 then
    richtung := Point(-1, 0);
end;
...
Wenn ich da auf den Button3 klicke um den Quelltext einzutragen dann kommt ne meldung:
"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]
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#7

Re: Snake (das Spiel)

  Alt 28. Dez 2004, 12:17
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
  Mit Zitat antworten Zitat
Benutzerbild von thepaul
thepaul

Registriert seit: 7. Nov 2004
Ort: Jena
63 Beiträge
 
Delphi 7 Personal
 
#8

Re: Snake (das Spiel)

  Alt 28. Dez 2004, 12:35
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;
Paul
Mosaic.net - Open Source Mosaik Creator in C#
  Mit Zitat antworten Zitat
Marcel_Mars
(Gast)

n/a Beiträge
 
#9

Re: Snake (das Spiel)

  Alt 6. Mär 2007, 17:19
Also ich habe noch eine gute erweiterung des Codes. So kann man auch durch wände gehen wie im richtigen Snake.
Delphi-Quellcode:
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;
Das muss man einfach in calc_snake reinschreiben.

Freundliche Grüsse

Mars
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#10

Re: Snake (das Spiel)

  Alt 9. Mai 2007, 21:49
Schade, dass die Links ins Leere laufen...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 6   « Erste     234 56      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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