Entwickler-Ecke

Algorithmen, Optimierung und Assembler - kaputtes random?


en!gma - Do 25.08.05 23:59
Titel: kaputtes random?
hi!
ich wollt mich mal an einem mastermind clon probieren.
ich wollte erstmal oben eine reihe erstellen lassen mit 5 zufällig ausgewählten farben.

also rufe ich diese prozedur ganz am anfang auf:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.zufallsFarben(number:integer);
var img : Timage;
    randomNr,i:integer;
begin
 for i := 89 to 88+number do
  begin
  img := TImage(FindComponent('image' + inttostr(i)));
   if img <> nil then
   begin
    randomNr:=random(3)+1;
    img.Picture.Bitmap.LoadFromFile('skins\standard\color'+intToStr(randomNr)+'.bmp');
    img.Hint:=intToStr(randomNr);
   end;
  end;
end;

89-88+number sind halt die bilder die in der obersten reihe sind.
das +number ist dafür gut, falls ich später die anzahl der spalten angeben möchte.

nur bekomme ich bei diesem random nun IMMER die farben
1 1 2 1 1 2 1 1
wieso?
was ist falsch?
random(3) sollte doch 0-2 ausgeben. +1 sollte also 1-3 ergeben.
also color1/2/3.bmp....
wenn ich das random(3)+1 anstatt dem randomNR einsetze, kommt zwar ein anderes ergebnis raus, aber trotzdem bleibt dies immer das selbe.

achja und bevor jemand fragt, ich speicher in hint nur die farbe der kugel ab.
denn hint brauch ich ja sonst nicht bei einem image.
jemand ne idee?

danke schonmal.


Amateur - Fr 26.08.05 00:02

hm haste randomize irgendwo?
bei mir klappt randomNr:=random(3)+1; in ner button methode, bekomme zahlen von 1 bis drei... auch ohne randomize...
speicher einfach ma und start delphi neu viell nen bug


en!gma - Fr 26.08.05 00:03

nein
eigentlich nur das was oben steht.
ich ruf das ganze aus dem form create auf.


Amateur - Fr 26.08.05 00:06

mach halt ma randomize gleich als erstes in die create methode
viell gehts ja


en!gma - Fr 26.08.05 00:08

yeah das wars schon danke.
war mir auch neu dieses randomize.
thx nochmal


Delete - Fr 26.08.05 00:29

user profile iconen!gma hat folgendes geschrieben:
war mir auch neu dieses randomize.

Dan habe ich noch was neues für dich: Die Delphi Hilfe. Und da steht, man mag es kaum glauben, bei Ramdom:
Zitat:

To initialize the random number generator, add a single call Randomize or assign a value to the RandSeed variable before making any calls to Random.

:roll:
Warum fragst du also hier im Forum? In der Hilfe steht doch schon alles. Und wenn ich mit einer Delphi Funktion nicht klar komme oder sie Probleme bereitet, dann ist meine erste Anlaufstelle immer die Hilfe.


en!gma - Fr 26.08.05 13:43

sorry hab nur kurz in die delphi hilfe geschaut und bin mal drübergeflogen.
hab das wohl übersehen


uall@ogc - Fr 26.08.05 13:56

trotzdem sollte auch bei nicht vorherigem setzen von randseed bzw aufrufen von randomize werte von 0-2 rauskommen