Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zufall generieren !?! (https://www.delphipraxis.net/56142-zufall-generieren.html)

fabgo 1. Nov 2005 12:25


Zufall generieren !?!
 
Hallo,

Ich habe folgendes Problem, und zwar habe ich in delphi ein auto erstellt, dass bei gelber ampel abbremst und vor der ampel zum stehen kommt.

Jetzt möchte ich aber zusätzlich noch programmieren, dass das auto bei gelber ampel noch beschleunigt und noch über die kruezung fährt.

Also benötige ich ein Zufallsprinzip,

dass etweder sagt,

--> abbremsen und stehenbleiben oder

--> beschleunigen und rüberfahren.

vielen Dank im vorraus :-D

fabgo

Khabarakh 1. Nov 2005 12:32

Re: Zufall generieren !?!
 
Ohne die geringste Kenntnis von deiner Engine kann ich dir nur sagen, dass du immer einmal pro Ampel entscheiden musst, ob das Auto weiterfahren soll oder nicht.
Delphi-Quellcode:
// Randomize nicht vergessen (z.B. im FormCreate)
if Odd(Random(2)) then
  Car.Stop;

fabgo 1. Nov 2005 12:39

Re: Zufall generieren !?!
 
ok, ich muss dann noch hinzufügen, dass ich erst vor kurzem mit delphi angefangen habe und mit deinen Begriffen nichts anfangen kann.

Ich kopiere mal meinen Text, vll kann mir dann wer helfen...


procedure TAmpel2.Timer1Timer(Sender: TObject);
begin
if ImAuto1.Left <= 620
then begin
ImAuto1.Left := ImAuto1.Left +1;
Timer1.Interval := 5;
end;
if ImAuto1.Left >= 620
then begin
ImAuto1.Left := -20;
Timer1.Interval := 5;
end
else if (ImAuto1.Left > 124) and (ImAuto1.Left < 174) and (Imgelblinks.Visible = True)
then begin
Timer1.Interval := 25;
end // GENAU AN DIESER STELLE WEIß ICH NICHT WEITER, HIER SOLL DER ZUFALL GENERIERT WERDEN, dass das Interval dann 1 ist...

else if (ImAuto1.Left > 124) and (ImAuto1.Left < 174)and (Imrotlinks.Visible)
then begin
Timer1.Interval := 25;
end;
end;

Aenogym 1. Nov 2005 12:53

Re: Zufall generieren !?!
 
hallo fabgo,

zufall ist ganz einfach:
rufe ein einziges mal in deinem programm den befehl randomize; auf (am besten im Ereignis OnFormCreate deines formulars). dies initialisiert den zufallsgenerator.
nun kannst du mit der funktion random(X) einen zufällig wert erzeugen lassen, der größer gleich null und kleiner X ist.

dein code müsste also heißen:

Delphi-Quellcode:
procedure TAmpel2.Timer1Timer(Sender: TObject);      
begin
  if ImAuto1.Left <= 620                               
    then begin                                        
      ImAuto1.Left := ImAuto1.Left +1;
      Timer1.Interval := 5;                  
    end;
  if ImAuto1.Left >= 620                               
    then begin
      ImAuto1.Left := -20;
      Timer1.Interval := 5;                            
    end
      else if (ImAuto1.Left > 124) and (ImAuto1.Left < 174) and (Imgelblinks.Visible = True)
        then begin
          //Timer1.Interval := 25;
       
          //zufallszahl generieren (null oder eins kommt raus).
          //wenn 1, dann ist interval = 25. sonst ist interval = 1
          if random(2) = 1 then
            Timer1.Interval := 25
          else
            Timer1.Interval := 1;

        end // GENAU AN DIESER STELLE WEIß ICH NICHT WEITER, HIER SOLL DER ZUFALL GENERIERT WERDEN, dass das Interval dann 1 ist...

          else if (ImAuto1.Left > 124) and (ImAuto1.Left < 174)and (Imrotlinks.Visible)
            then begin
              Timer1.Interval := 25;
            end;
end;
und: herzlich willkommen in der DelphiPRAXiS :hi:
PS: wenn du das nächste mal delphi-code hier einfügst, umschließe ihn doch bitte mit den delphi-tags (das leerzeichen nach dem slash weglassen):
[delphi]if 1 = 2 then 3;[/ delphi]

aenogym

junale 1. Nov 2005 12:58

Re: Zufall generieren !?!
 
Hi fabgo,

Zitat:

Zitat von fabgo
ok, ich muss dann noch hinzufügen, dass ich erst vor kurzem mit delphi angefangen habe und mit deinen Begriffen nichts anfangen kann.

Erklärung:
Odd (Zahl) gibt true zurück wenn die Zahl ungerade ist
Random (Zahl) gibt eine 'zufällige' Zahl X für die gilt 0 <= X < Zahl. Hier also entweder 0 oder 1.

Delphi-Quellcode:

procedure TAmpel2.Timer1Timer(Sender: TObject);      
begin
  if ImAuto1.Left <= 620                               
    then begin                                        
      ImAuto1.Left := ImAuto1.Left +1;
      Timer1.Interval := 5;                  
    end;
  if ImAuto1.Left >= 620                               
    then begin
      ImAuto1.Left := -20;
      Timer1.Interval := 5;                            
    end
      else if (ImAuto1.Left > 124) and (ImAuto1.Left < 174) and (Imgelblinks.Visible = True)
        then begin
          [b]if Odd(Random(2)) then
            Timer1.Interval := 25
           else
            Timer1.Interval := 1;[/b]
        end
          else if (ImAuto1.Left > 124) and (ImAuto1.Left < 174) and (Imrotlinks.Visible)
            then begin
              Timer1.Interval := 25;
            end;
end;[/quote]
Dies wäre die enfachste Veränderung (und gleichzeitig Khabarakh's Lösung).

fabgo 1. Nov 2005 13:18

Re: Zufall generieren !?!
 
Vieln Dank!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 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