Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem beim mehrfachen Aufrufen einer Funktion mit Random (https://www.delphipraxis.net/2449-problem-beim-mehrfachen-aufrufen-einer-funktion-mit-random.html)

Yheeky 23. Jan 2003 18:46


Problem beim mehrfachen Aufrufen einer Funktion mit Random
 
Hi,

ich habe folgendes Problem: Ich möchte für 4 Spieler Karten vergeben. Diese sollen nach dem Zufallsprinzip verteilt werden. Das mache ich folgendermaßen:

Zitat:

procedure TForm1.KartenGeben(Spieler : Integer);
var Farbe, SteinNummer : Integer;
begin
Randomize;

for SteinNummer := 1 to 5 do
begin
Farbe := Random(4);
TImage(FindComponent('Spieler' + IntToStr(Spieler) + 'Stein' + IntToStr(SteinNummer))).Picture.LoadFromFile(Extra ctFilePath(Application.EXEName) + IntToStr(Farbe) + '.bmp');
end;

end;
Das klappt bei einem Spieler auch wunderbar, doch wenn ich danach dieselbe Funktion für einen anderen Spieler aufrufe, erhält dieser genau die selben Karten. Warum? Habe auch versucht, die "Farbe-Variable" vorher wieder auf -1 zu setzen, aber daran lag´s auch nicht. Vielleicht kann mir da ja jemand helfen...

Gruß Yheeky

sakura 23. Jan 2003 18:47

Such mal im Forum nach Randomite, da gibt es schon etlich Diskussionen.

Kurz: Randomize solltest Du nur einmal pro Programmablauf aufrufen. z.B. im Create Handler Deines Mainforms.

Jan 23. Jan 2003 18:52

aber genau das tut er doch, er hat doch das randomize vor der for-schleife.
:(
BB!
Jan

Luckie 23. Jan 2003 18:58

Ja, aber es wird jedesmal aufgerufen, wenn Karten gegeben werden. Also nur einmal in OnCreate aufrufen.

Christian Seehase 23. Jan 2003 18:58

Moin Jan,

Randomize wird zwar vor der for-Schleife aufgerufen, aber nicht einmal pro Programmstart, also z.b. im OnCreate des Hauptformulares, oder im initialization Abschnitt einer Unit. ;-)

Yheeky 23. Jan 2003 18:58

@Sakura: Yep, genau das war´s...hatte sowas in der Art auch gedacht, weil mir das bei dem mehrfachen Aufrufen aufgefallen ist. Deswegen hatte ich es auch - wie Jan gemerkt hat - vor die for-Schleife gesetzt, aber die Funktion an sich, also auch das Randomize, wird ja trotzdem mehrere Male aufgerufen...deswegen der Fehler.
Danke nochmal!

Gruß Yheeky


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 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 by Thomas Breitkreuz