AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem beim mehrfachen Aufrufen einer Funktion mit Random
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim mehrfachen Aufrufen einer Funktion mit Random

Ein Thema von Yheeky · begonnen am 23. Jan 2003 · letzter Beitrag vom 23. Jan 2003
Antwort Antwort
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

Problem beim mehrfachen Aufrufen einer Funktion mit Random

  Alt 23. Jan 2003, 17:46
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 23. Jan 2003, 17: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.
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#3
  Alt 23. Jan 2003, 17:52
aber genau das tut er doch, er hat doch das randomize vor der for-schleife.

BB!
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 23. Jan 2003, 17:58
Ja, aber es wird jedesmal aufgerufen, wenn Karten gegeben werden. Also nur einmal in OnCreate aufrufen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5
  Alt 23. Jan 2003, 17: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#6
  Alt 23. Jan 2003, 17: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
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:19 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