AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Wiederholen einer aktion
Thema durchsuchen
Ansicht
Themen-Optionen

Wiederholen einer aktion

Ein Thema von louisnws · begonnen am 4. Feb 2012 · letzter Beitrag vom 5. Feb 2012
 
louisnws

Registriert seit: 3. Feb 2012
10 Beiträge
 
#4

AW: Wiederholen einer aktion

  Alt 5. Feb 2012, 11:04
Hast du da mal mit einer For-Schleife versucht?
Hier kannst du auch eine Case-Anweisung benutzen

Delphi-Quellcode:
case random(4)of
  0: inc(JagdX,10);
  1: dec(JagdX,10);
  2: inc(JagdY,10);
  3: dec(JagdY,10);
end;


Wofür steht die Zahl "778"? Ich nehme die Breite des Forumlars? Schreib dies:
Delphi-Quellcode:
If
  (JagdX + 50 > form1.clientwidth) then dec(JagdX,20);
Wenn du magst, kannst du ja deinen gesamten Code anhängen, dann können wir das genauer ansehen.
Also Ich hab es mit einer for it schleife probiert die müsste dann lauten
for zufall:=0 to 0 do inc(jagdx,5) oder? ich vesteh das mit dem x to x nicht richtig
Und das
Delphi-Quellcode:
If
  (JagdX + 50 > form1.clientwidth) then dec(JagdX,20);
hab ich grade ausprobiert geht aber nicht

hier mein kompletter quelltext
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);



  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  MannX: Integer= 60;
  MannY: Integer= 60;
  JagdX: Integer;
  JagdY: Integer;
  Zufall: Integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  refresh;
  Button1.Visible := false;
  Timer1.Enabled := true;


end;




procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);

begin
if Key= Ord('W') then
begin
  dec(mannY,7);
  Refresh;
  Canvas.Rectangle(MannX,MannY,MannX + 50,MannY+50);
  Canvas.Rectangle(JagdX,JagdY,JagdX+50,JagdY+50);
end;

if Key= Ord('S') then
begin
  inc(MannY,7);
  Refresh;
  Canvas.Rectangle(MannX,MannY,MannX + 50,MannY+50);
  Canvas.Rectangle(JagdX,JagdY,JagdX+50,JagdY+50);
end;

if Key= Ord('A') then
begin
  Dec(MannX,7);
  Refresh;
  Canvas.Rectangle(MannX,MannY,MannX + 50,MannY+50);
  Canvas.Rectangle(JagdX,JagdY,JagdX+50,JagdY+50);
end;

if Key= Ord('D') then
begin
  //rechts
  inc(MannX,7);
  Refresh;
  Canvas.Rectangle(MannX,MannY,MannX + 50,MannY+50);
  Canvas.Rectangle(JagdX,JagdY,JagdX+50,JagdY+50);
end;

end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
  zufall:=random(4);
  if Zufall = 0 then inc(JagdX,10);
  if Zufall = 1 then dec(JagdX,10);
  if Zufall = 2 then inc(JagdY,10);
  if Zufall = 3 then dec(JagdY,10);
  refresh;
  Canvas.Brush.Color := clred;
  Canvas.Rectangle(MannX,MannY,MannX + 50,MannY+50);
  Canvas.Brush.Color := clyellow;
  Canvas.Rectangle(JagdX,JagdY,JagdX+50,JagdY+50);
  if (MannX + 50 > JagdX) and (MannX < JagdX + 50) and (MannY + 50 > JagdY) and
      (MannY < JagdY+50) then
  begin
    JagdX := Random(200) + 1;
    JagdY := Random(200) + 1;
    refresh;
    Canvas.Rectangle(JagdX, JagdY, JagdX + 50, JagdY + 50);
    Label1.Caption:= ('Congrantulations');
    Button1.Visible := true;
    Timer1.Enabled := false;
  end;
  If

  (JagdX + 50 > 780) then dec(JagdX,20);

  If

  (JagdX + 50 < 0) then inc(JagdX,20);

  if
  (JagdX < 5) then inc(JagdX,20);

  If
  (JagdY < 7) then inc(Jagdy,20);
end;
Zitat:
Da gibt es Millionen Varianten es zu lösen.
z.B. die neue Richtung jedesmal aus der Nähe zum Rand in Laufrichtung, der Richtung des Gegners/Spielers und zu kleinem Teil aus Zufall bestimmen, wobei die Wahrscheinlichkeit in Richtung des letzen Schrittes weiter zu laufen nur größer sein muß, als für die anderen Richtungen.
Also erstmal Wahrscheinlichkeiten für jede Richtung berechnen und dann darüber per Zufall die Richtung auswählen.
wie genau geht das? da müsste ich dann mehrere fälle reinknüpfen oder? also irgendwie grad in die gegenrichtung von der koordinate des anderen quadrates oder? Wie genau?

Geändert von louisnws ( 5. Feb 2012 um 11:09 Uhr)
  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 02:46 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