Einzelnen Beitrag anzeigen

cello

Registriert seit: 19. Okt 2012
15 Beiträge
 
#1

Snake/ sie mag nicht wenden

  Alt 25. Nov 2012, 14:31
hey ich hätte mal eine frage. Ich programmiere im Moment snake. Habe die Kollisionsabfrage, einen Apfel der zufällig spawnt und die Schlange kann auch laufen aber lenken geht nicht

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, pngimage, pngextra, pnglang, ExtCtrls, StdCtrls;

type
  TForm2 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    Button1: TButton;
    Timer2: TTimer;
    Timer3: TTimer;
    Timer4: TTimer;
    Timer5: TTimer;
    Timer6: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure Timer4Timer(Sender: TObject);
    procedure Timer5Timer(Sender: TObject);
    procedure Timer6Timer(Sender: TObject);
    procedure Timer7Timer(Sender: TObject);
    procedure Timer8Timer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
    Shift: TShiftState);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;




var
  Form2: TForm2;

implementation

{$R *.dfm}

 TYPE Tfeld = //REcord für das Spielfeld wird angelegt
 record
    Bild: TImage;
    Name: String;
 End;
 var feld: array [1..17,1..13] of Tfeld; //array für Spielfeld wird angelegt
 var x,y,x2,y2 : integer;


 TYPE Tsnake = //record für die Schlange
 record
    x1 : integer;
    y1 : integer;
 end;
  var snake: array [1..12] of Tsnake;

  var olddirection, direction, dup, dright, ddown, dleft:string; //hilfvariabeln für die Richtung

  var längesnake: integer;

 //____________________Spielfeld______________________________________________________________________________________________
 procedure init;
 var i : integer;

 begin
    i:=1;
    randomize;
    for x:=1 to 13 do
    begin;
      for y:=1 to 17 do
        begin;
          feld[x,y].Name := 'Gras';
          feld[x,y].Bild := Timage.create(Form2);
          feld[x,y].Bild.parent := Form2;
          feld[x,y].Bild.top := x*50;
          feld[x,y].Bild.left := y*50;
          feld[x,y].Bild.Picture.LoadFromFile('images/gras.PNG'); //Gras laden
        end;
    end;


      for y:= 1 to 17 do
      begin;
        for x:=1 to 13 do
          begin;
            If (y = 1) or (y = 17) then
             begin;
              feld[x,y].Name := 'Wand';
              feld[x,y].Bild := Timage.create(Form2);
              feld[x,y].Bild.parent := Form2;
              feld[x,y].Bild.top := x*50;
              feld[x,y].Bild.left := y*50;
              feld[x,y].Bild.Picture.LoadFromFile('images/wand-hoch.PNG') //Wand rechts und links laden
             end;
          end;
      end;

      for x:= 1 to 13 do
      begin;
        for y:=1 to 17 do
          begin;
            If (x = 1)or(x = 13) then
             begin;
              feld[x,y].Name := 'Wand';
              feld[x,y].Bild := Timage.create(Form2);
              feld[x,y].Bild.parent := Form2;
              feld[x,y].Bild.top := x*50;
              feld[x,y].Bild.left := y*50;
              feld[x,y].Bild.Picture.LoadFromFile('images/wand-breit.PNG') //Wand oben und unten laden
             end;
          end;
      end;



      for x:=6 to 9 do
      begin;
        y:=9;
        feld[x,y].Name := 'Snake-Körper';
        feld[x,y].Bild := Timage.create(Form2);
        feld[x,y].Bild.parent := Form2;
        feld[x,y].Bild.top := x*50;
        feld[x,y].Bild.left := y*50;
        feld[x,y].Bild.Picture.LoadFromFile('images/körper.PNG'); // Snake laden

        snake[i].x1:=x;
        snake[i].y1:=y;
        i:=i+1;
      end;

       x:= random(10)+2;
       y:= random(13)+2; //Apfel erscheint zufällig

      begin
        feld[x,y].Name := 'Apfel';
        feld[x,y].Bild := Timage.create(Form2);
        feld[x,y].Bild.parent := Form2;
        feld[x,y].Bild.top := x*50;
        feld[x,y].Bild.left := y*50;
        feld[x,y].Bild.Picture.LoadFromFile('images/apfel.PNG'); //Apfel laden
      end;
        x:=0;
        y:=0;
        dup:= 'up';
        dright:= 'right';
        dleft:= 'left';
        ddown:='down';
        längesnake:=4;
 end;


//______________________Spielfeld kreieren_________________________________________________________________________________________
procedure TForm2.FormCreate(Sender: TObject);
begin
 Form2.DoubleBuffered:=True;
 init; //Spielfeld-Aufbau
end;


//_____________________________________________________________________________________________________
procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case chr(key) of
    chr(38),'w', 'W': if olddirection <> ddown then
    begin
      direction:=dup;
      Timer1.Enabled:=true;
      Timer2.Enabled:=true; //Start der Bewegung
      olddirection:=direction;
    end;
    chr(40),'s', 'S': if olddirection <> dup then
    begin
      direction:=ddown;
      Timer3.Enabled:=true;
      Timer4.Enabled:=true;
      olddirection:=direction;
    end;
    chr(37),'a', 'A': if olddirection <> dright then direction := dleft;
    chr(39),'d', 'D': if olddirection <> dleft then
    begin
     direction := dright;
     Timer5.Enabled:=true;
     olddirection:=direction;
    end;

  end;
end;


procedure TForm2.Button1Click(Sender: TObject);
begin
  Button1.Visible:=false;
  x:=5;
  y:=9;
  x2:=9;
  y2:=9;
end;


procedure TForm2.Timer1Timer(Sender: TObject);
begin
  feld[x,y].Name := 'Snake-Körper';
  feld[x,y].Bild := Timage.create(Form2);
  feld[x,y].Bild.parent := Form2;
  feld[x,y].Bild.top := x*50;
  feld[x,y].Bild.left := y*50;
  feld[x,y].Bild.Picture.LoadFromFile('images/körper.PNG');


  x:=x-1; //nach oben bewegen

  If ((x <1) or (y <1) or (x>13) or (y>17) or (x2 <1) or (y2 <1) or (x2>13) or (y2>17) or (snake[1].x1 <1) or (snake[1].y1 <1) or (snake[1].x1>13) or (snake[1].y1>17)) then
   begin
     Timer1.Enabled:=false;
     Timer2.Enabled:=false;
     showmessage('Sie haben verloren! ):'); //Wandcrash-Abfrage

   end;

end;

procedure TForm2.Timer2Timer (Sender:TObject);
begin

  feld[x2,y2].Name := 'Gras';
  feld[x2,y2].Bild := Timage.create(Form2);
  feld[x2,y2].Bild.parent := Form2;
  feld[x2,y2].Bild.top := x2*50;
  feld[x2,y2].Bild.left := y2*50;
  feld[x2,y2].Bild.Picture.LoadFromFile('images/gras.PNG'); //läd Gras
                                                              //auf das
  x2:=x2-1; //letzte Teil
                                                              //der Snake
   end;



 procedure TForm2.Timer3Timer(Sender: TObject);
 begin
  Timer2.Enabled:=false;
  Timer1.Enabled:=false;
  Timer5.Enabled:=false;
  Timer2.Enabled:=false;
  feld[x,y].Name := 'Snake-Körper';
  feld[x,y].Bild := Timage.create(Form2);
  feld[x,y].Bild.parent := Form2;
  feld[x,y].Bild.top := x*50;
  feld[x,y].Bild.left := y*50;
  feld[x,y].Bild.Picture.LoadFromFile('images/körper.PNG');

  x:=x+1; //nach unten bewegen

  If ((x <1) or (y <1) or (x>13) or (y>17) or (x2 <1) or (y2 <1) or (x2>13) or (y2>17) or (snake[1].x1 <1) or (snake[1].y1 <1) or (snake[1].x1>13) or (snake[1].y1>17)) then
   begin
     Timer3.Enabled:=false;
     Timer4.Enabled:=false;
     showmessage('Sie haben verloren! ):'); //Wandcrash-Abfrage

   end;

 end;

 procedure TForm2.Timer4Timer (Sender:TObject);
 begin

  feld[x2,y2].Name := 'Gras';
  feld[x2,y2].Bild := Timage.create(Form2);
  feld[x2,y2].Bild.parent := Form2;
  feld[x2,y2].Bild.top := x2*50;
  feld[x2,y2].Bild.left := y2*50;
  feld[x2,y2].Bild.Picture.LoadFromFile('images/gras.PNG'); //läd Gras
                                                              //auf das
  x2:=x2+1; //letzte Teil
                                                              //der Snake
  end;



procedure TForm2.Timer5Timer(Sender: TObject);
begin
  If direction=Dright then
  begin
  Timer1.Enabled:=false;
  Timer2.Enabled:=false;
  Timer3.Enabled:=false;
  Timer4.Enabled:=false;
  feld[x,y].Name := 'Snake-Körper';
  feld[x,y].Bild := Timage.create(Form2);
  feld[x,y].Bild.parent := Form2;
  feld[x,y].Bild.top := x*50;
  feld[x,y].Bild.left := y*50;
  feld[x,y].Bild.Picture.LoadFromFile('images/körper.PNG');

  y:=y+1; //nach rechts bewegen
  end;

  If ((x <1) or (y <1) or (x>13) or (y>17) or (x2 <1) or (y2 <1) or (x2>13) or (y2>17) or (snake[1].x1 <1) or (snake[1].y1 <1) or (snake[1].x1>13) or (snake[1].y1>17)) then
   begin
     Timer5.Enabled:=false;
     Timer2.Enabled:=false;
     showmessage('Sie haben verloren! ):'); //Wandcrash-Abfrage

   end;

end;


 procedure TForm2.Timer6Timer (Sender:TObject);
 begin

  feld[x2,y2].Name := 'Gras';
  feld[x2,y2].Bild := Timage.create(Form2);
  feld[x2,y2].Bild.parent := Form2;
  feld[x2,y2].Bild.top := x2*50;
  feld[x2,y2].Bild.left := y2*50;
  feld[x2,y2].Bild.Picture.LoadFromFile('images/gras.PNG'); //läd Gras
                                                              //auf das
  x2:=x2+1; //letzte Teil
                                                              //der Snake
  end;


procedure TForm2.Timer7Timer(Sender: TObject);
begin

  Timer1.Enabled:=false;
  Timer2.Enabled:=false;
  Timer3.Enabled:=false;
  Timer4.Enabled:=false;
  Timer5.Enabled:=false;
  Timer6.Enabled:=false;
  feld[x,y].Name := 'Snake-Körper';
  feld[x,y].Bild := Timage.create(Form2);
  feld[x,y].Bild.parent := Form2;
  feld[x,y].Bild.top := x*50;
  feld[x,y].Bild.left := y*50;
  feld[x,y].Bild.Picture.LoadFromFile('images/körper.PNG');

  y:=y-1; //nach links bewegen

  If ((x <1) or (y <1) or (x>13) or (y>17) or (x2 <1) or (y2 <1) or (x2>13) or (y2>17) or (snake[1].x1 <1) or (snake[1].y1 <1) or (snake[1].x1>13) or (snake[1].y1>17)) then
   begin
     Timer5.Enabled:=false;
     Timer2.Enabled:=false;
     showmessage('Sie haben verloren! ):'); //Wandcrash-Abfrage

   end;

end;

procedure TForm2.Timer8Timer (Sender:TObject);
 begin

  feld[x2,y2].Name := 'Gras';
  feld[x2,y2].Bild := Timage.create(Form2);
  feld[x2,y2].Bild.parent := Form2;
  feld[x2,y2].Bild.top := x2*50;
  feld[x2,y2].Bild.left := y2*50;
  feld[x2,y2].Bild.Picture.LoadFromFile('images/gras.PNG'); //läd Gras
                                                              //auf das
  x2:=x2+1; //letzte Teil
                                                              //der Snake
  end;

end.
Was mache ich falsch?