Einzelnen Beitrag anzeigen

Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Image bewegen, sleep funktion, wettrennen

  Alt 14. Mai 2019, 12:05
hmm ok, zu lange her das ichs genutzt habe war ja auch nur ein Beispiel.

@Delph.Narium: Du hast einen kleinen Fehler in deinem Beispiel:

Image1.Left := Image1.Left + Random(iRandom);
Image2.Left := Image2.Left + Random(iRandom);
Image3.Left := Image2.Left + Random(iRandom);

Das mit der Bedingung der Schleifen Nutzung hatte ich garnicht gesehen. Die Schleifen hatte halt den Nachteil das immer Bild 1 als Erstes bewegt wird (evtl. daher im Vorteil bzw. es könnten mehrere gleichzeitig das Ziel erreichen).

Hier mal dasBeispiel von Delphi.Narium etwas erweitert.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Imaging.pngimage,
  Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Image2: TImage;
    Image3: TImage;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  iSleep : Integer;
  iRandom : Integer;
  sMoveImage : String;
begin
  Image1.Left := 0; //
  Image2.Left := Image1.Left; //setz die Position der Images zurück um einen neuen Durchlauf starten zu können
  Image3.Left := Image1.Left; //

  iSleep := 10; // Wertebereich für die Pausen per Sleep, eventuell anpassen.
                 // Die Pausen werden dadurch unterschiedlich lang.
  iRandom := 5; // Wertebereich für die zufällige Verschiebung der Bilder, eventuell anpassen.
                 // Die Anzahl der Pixel, um die verschoben wird, ändert sich je Schleifendurchlauf und je Bild.

  if (Image1.Left < 400) and (Image2.left < 400) and (Image3.left < 400) then begin
  begin
    repeat
      sMoveImage := 'Image' + inttostr(random(3) + 1); //Zufällige Auswahl welches Bild bewegt werden soll.
      TImage(Form1.FindComponent(sMoveImage)).Left := TImage(Form1.FindComponent(sMoveImage)).Left + Random(iRandom);
      Application.ProcessMessages;
      Sleep(Random(iSleep));
    until (image1.left>399) or (Image2.Left>=399) or (Image3.Left>=399);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize; // Je nach Delphiversion (insbesondere bei älteren) erforderlich.
             // Sollte aber nur einmal aufgerufen werden, daher ins FormCreate verschieben.
end;

end.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (14. Mai 2019 um 13:20 Uhr)
  Mit Zitat antworten Zitat