AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Neue Frage zu Snake

Ein Thema von TaIPaN · begonnen am 20. Sep 2006 · letzter Beitrag vom 30. Sep 2006
 
TaIPaN

Registriert seit: 17. Sep 2006
3 Beiträge
 
#3

Re: Neue Frage zu Snake

  Alt 26. Sep 2006, 12:58
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.
SRY dassich neu posten musste aber war leider schon zu spät dran...
Vll erbarmt sich meiner ja noch einer^^

mfg taipi
  Mit Zitat antworten Zitat
 


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 11:29 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