AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Snake programmieren/brauche Hilfe bei der bewegung
Thema durchsuchen
Ansicht
Themen-Optionen

Snake programmieren/brauche Hilfe bei der bewegung

Offene Frage von "Bjoerk"
Ein Thema von cello · begonnen am 19. Nov 2012 · letzter Beitrag vom 20. Nov 2012
Antwort Antwort
cello

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

Snake programmieren/brauche Hilfe bei der bewegung

  Alt 19. Nov 2012, 18:34
ich soll für die schule snake prgrammieren. leider haben wir nie gelernt wie man bewegung in die sache reinbringt. ich habe im internet geguckt aber nichts gefunden, was verständlich ist oder so war, dass man nicht den ganzen code wieder löschen muss. hier mal das, was ich bis jetzt habe.
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;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Körper;
    procedure update;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;





implementation
var
  Form2: TForm2;

 TYPE Tfeld =
 record
    Bild: TImage;
    Name: String;
 End;
 var feld: array [1..17,1..13] of Tfeld;
 var x,y : integer;


 TYPE Tsnake =
 record
    x1 : integer;
    y1 : integer;

 end;
  var snake: array [1..12] of Tsnake;


 var
Rrichtung: byte;
{$R *.dfm}



 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');
        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')
             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')
             end;
      end;
      end;

 end;



      begin
      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[i].x1:=x;
        snake[i].y1:=y;
        i:=i+1;

      end;

       x:= random(14)+2;
       y:= random(10)+2;

      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');
      end;
        x:=0;
        y:=0;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
 Form2.DoubleBuffered:=True;
 init;
end;

    

end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  Button1.Visible:=false;
  TForm2.Timer1Timer;



end;










end.
tut mir leid wenn einige sachen nicht gut eingerückt sind wäre echt toll wenn mir jemand helfen könnte
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Snake programmieren/brauche Hilfe bei der bewegung

  Alt 19. Nov 2012, 20:09
Die Erkenntnis (Einrückung) ist da, nur fehlt die Motivation?

Rücke es vernünftig ein, dann zeigen sich meistens schon ein paar Fehler, und dann schauen wir weiter.
Und bitte auch überflüssige Leerzeilen (mehr als 1 ist immer zuviel) entfernen.

EDIT (da der TE nicht in der Lage ist oder keine Motivation dazu hat, habe ich den Source zum Formatieren mal durch mein Delphi gejagt)
Und schon sieht man auch gleich einen Fehler:
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;
    procedure FormCreate( Sender : TObject );
    procedure Button1Click( Sender : TObject );
    procedure Körper;
    procedure update;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

implementation

var
  Form2 : TForm2;

TYPE
  Tfeld = record
    Bild : TImage;
    Name : String;
  End;

var
  feld : array [1 .. 17, 1 .. 13] of Tfeld;

var
  x, y : integer;

TYPE
  Tsnake = record
    x1 : integer;
    y1 : integer;

  end;

var
  snake : array [1 .. 12] of Tsnake;

var
  Rrichtung : byte;
{$R *.dfm}

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' );
        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' )
            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' )
            end;
        end;
    end;

end;

begin // ja, wozu soll das denn gehören?
  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[i].x1 := x;
      snake[i].y1 := y;
      i := i + 1;

    end;

  x := random( 14 ) + 2;
  y := random( 10 ) + 2;

  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' );
  end;
  x := 0;
  y := 0;
end;

procedure TForm2.FormCreate( Sender : TObject );
begin
  Form2.DoubleBuffered := True;
  init;
end;

end;

procedure TForm2.Button1Click( Sender : TObject );
begin
  Button1.Visible := false;
  TForm2.Timer1Timer;

end;

end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (20. Nov 2012 um 08:37 Uhr)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Snake programmieren/brauche Hilfe bei der bewegung

  Alt 20. Nov 2012, 06:34
wäre echt toll wenn mir jemand helfen könnte
Wo ist denn das Problem? Du hast schonmal einen Timer, du hast deine Schlangen, deren X- und Y-Position du kennst. Also musst du im Timer nur entsprechend die X- und / oder Y-Werte ändern, neu zeichnen lassen und schwupps ... IGORRR ES LÄÄÄBT!
  Mit Zitat antworten Zitat
cello

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

AW: Snake programmieren/brauche Hilfe bei der bewegung

  Alt 20. Nov 2012, 07:59
Wo ist denn das Problem? Du hast schonmal einen Timer, du hast deine Schlangen, deren X- und Y-Position du kennst. Also musst du im Timer nur entsprechend die X- und / oder Y-Werte ändern, neu zeichnen lassen und schwupps ... IGORRR ES LÄÄÄBT! [/QUOTE]

ja nur weiß ich nicht wie es machen soll, dass die schlange solange läuft bis man was anderes drückt
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Snake programmieren/brauche Hilfe bei der bewegung

  Alt 20. Nov 2012, 08:25
.. in onKeyUp Ereignis der Form festellen welche Taste gedrückt wurde.
(Eventuell KexyPreview auf true setzen)

Pfeil nach rechts -> Laufrichtung der Schlnage nach rechts
Pfeil nach links -> Laufrichtung der Schlange nach links
...

In der execute Methode des Timers
musst Du nun auf die Laufrichtung reagieren und entsprechend die X und Y Werte
variieren.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Snake programmieren/brauche Hilfe bei der bewegung

  Alt 20. Nov 2012, 12:33
Zu Anfang würd' ich vielleicht erst mal diese ganzen Bilder weglassen und die Schlange durch Kreise darstellen, insbesondere weil das etwas einfacher ist und weil du einige Bilder so erzeugst, daß du sie gar nicht mehr freigeben kannst.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 10:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz