Einzelnen Beitrag anzeigen

IceBube

Registriert seit: 9. Jul 2008
177 Beiträge
 
#2

AW: Snake/ sie mag nicht wenden

  Alt 25. Nov 2012, 17:55
Hallo!

Also ich hab ziemlich lange gebraucht um deinen Code zu verstehen, bzw. kenn ich mich noch immer nicht so ganz aus :/
Warum so viele Timer, ist es richtig dass du für jede Bewegungsrichtung einen Timer hast?

Besser ist es, wenn du mit TPoint arbeitest!

Delphi-Quellcode:
var
  Dir : TPoint;
  Speed : Integer;

procedure onKeyDown();
begin
 iF Key = vk_LEFT Then Point(-1, 0);
 iF Key = vk_RIGHT Then Point( 1, 0);
 iF Key = vk_UP Then Point( 0, 1);
 iF Key = VK_DOWN Then Point( 0,-1);
end;

procedure Timer.OnTimer();
begin
 //Bewegung
 Koerper.Left := Koerper.Left + (Speed * Dir.X);
 Koerper.Top := Koerper.Top + (Speed * Dir.Y);

 //Kollisionsabfrage
 iF Collision Then
 begin
  Verloren();
 end;
end;
Ebenso besser wäre es evt. die Kollisionsabfrage in eine Function zu geben..mit einem Boolean als Rückagewert.

lg

/edit

Einfacher ist es auch wenn du den TSnake-Record als Klasse machst

z.B:

Delphi-Quellcode:
type
 TSnake = class (TImage)
  function Collision() : Boolean; //für Kollisionsabfrage
 public
  Speed : Integer;
  Dir : TPoint ;
  Laenge : Integer;
 end;

var
 Snake : TSnake;

//Erstellen
Snake := TSnake.Create(Form);
with Snake do
begin
 Parent := Form:
 Picture.LoadFromFile('');

 Speed := 1;
 Dir := Point(0, 0);
 Laenge := 6;

 AutoSize := TRUE;
 Show;
end;

//Timer
Snake.Left := Snake.Left + Snake.Dir.X;
...

if Snake.Collision Then
...

Geändert von IceBube (25. Nov 2012 um 18:09 Uhr)