![]() |
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 |
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; |
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; |
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:
und: herzlich willkommen in der DelphiPRAXiS :hi:
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; 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 |
Re: Zufall generieren !?!
Hi fabgo,
Zitat:
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:
Dies wäre die enfachste Veränderung (und gleichzeitig Khabarakh's Lösung).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] |
Re: Zufall generieren !?!
Vieln Dank!!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 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