So, ich hab mal diesen Code geschrieben und auch getestet:
Delphi-Quellcode:
function TForm1.MixString(mixstr : string):string;
var i, x1, x2 : longword;
rem1, rem2 : Char;
begin
Case length(mixstr)>0 of
true : begin
Screen.Cursor := crHourGlass;
randomize;
x2 := Random(length(mixstr))+1;
for i := 1 to 1000*length(mixstr)
do begin
x1 := Random(length(mixstr))+1;
rem1 := Char(mixstr[x1]);
rem2 := Char(mixstr[x2]);
mixstr[x1] := rem2;
mixstr[x2] := rem1;
x2 := x1;
end;
result := mixstr;
Screen.Cursor := crDefault;
end;
false : result := '';
end;
end;
Die Problematik bei einem solchen Code ist immer, dass zwei Zufallszahlen zugleich generiert werden müssen. Da die dann aber fast immer gleich ausfallen, muss man den Rechner zwischendurch etwas beschäftigen. Ich hab das jetzt so gemacht, dass der Rechner immer eine Zahl der vorherigen "Ziehung" speichert. Auf diese Weise wird das Mischen überhaupt erst möglich!
Trotzdem kann ich dir nicht garantieren, dass es nicht auch bei diesem Code vorkommt, dass gleiche Zufallszahlen generiert werden, weil der Code, der zwischenzeitlich ausgeführt wird, dennoch sehr gering ist.
Soll es noch zufälliger werden, dann musst du dich mal nach dem Thema "Pseudozufallszahlen" erkundigen. Das führt dann aber zwangsläufig zu komplizierten Algorithmen und langen Generationszeiten. Zudem muss der Nutzer meistens die Maus bewegen.
MfG.