Guten Mittag
Ich bin gerade dabei, ein kleines Kartenspiel zu programmieren. Dabei sollen je 3 Karten an insgesamt 4 Spieler verteilt werden, also 12 Karten. Das Deck besteht aus 20 Karten. Jede Karte ist nummeriert von 1-20. Nun habe ich mit gedacht, dass ich eine Zufallszahl zwischen 1 und 20 generiere, schaue, ob die in einem Array, welches als Speicher für schon verteile Karten dient, vorhanden ist, wenn ja, dann muss er noch mal eine generieren und schauen, wenn nicht wird sie umgewandelt in den Kartenname und davor noch in das Kartenarray gespeichert. Am Anfang durchgehe ich zwei For-Schleifen, einmal für Spieler 0 bis 3 und dann für Karte 1 bis 3. Allerdings will der Algorithmus noch nicht so richtig, ich bin jetzt seit einer Stunde dran, Fehler zu suchen, aber jedes Mal verteilt er mir die Karten nicht richtig oder läuft in eine Endlosschleife
Wo ist mein bzw. sind meine Fehler?
Delphi-Quellcode:
procedure TSFrame.Mischen();
var i,j,k,zufall:integer;
Status:Boolean;
Karte,Test:String;
begin
Randomize;
for i:=0 to Length(VerteilteKarten)-1 do
VerteilteKarten[i]:=0;
for i:=0 to 3 do begin
for j:=1 to 3 do begin
Status:=false;
repeat
Status:=false;
zufall:=Random(1)+ 20;
for k:=0 to Length(VerteilteKarten)-1 do begin
if VerteilteKarten[k] = zufall then begin
Status:=true;
break;
end;
end;
until Status = False;
for k:=0 to Length(VerteilteKarten)-1 do begin
if VerteilteKarten[k] = 0 then begin
VerteilteKarten[k] := zufall;
break;
end;
end;
if zufall = 1 then
Karte:='K1'
else if zufall = 2 then
Karte:='E5'
else if zufall = 3 then
Karte:='H4'
else if zufall = 4 then
Karte:='H5'
else if zufall = 5 then
Karte:='K5'
else if zufall = 6 then
Karte:='P3'
else if zufall = 7 then
Karte:='P1'
else if zufall = 8 then
Karte:='P5'
else if zufall = 9 then
Karte:='P4'
else if zufall = 10 then
Karte:='E4'
else if zufall = 11 then
Karte:='E2'
else if zufall = 12 then
Karte:='H2'
else if zufall = 13 then
Karte:='K2'
else if zufall = 14 then
Karte:='H1'
else if zufall = 15 then
Karte:='K4'
else if zufall = 16 then
Karte:='P2'
else if zufall = 17 then
Karte:='E1'
else if zufall = 18 then
Karte:='E3'
else if zufall = 19 then
Karte:='H3'
else if zufall = 20 then
Karte:='K3';
Server.Socket.Connections[i].sendText('-gc'+IntToStr(j)+Karte);
TEdit(SFrame.FindComponent('sp'+IntToStr(i+1)+'_k'+IntToStr(j))).Text:=Karte;
end;
end;
end;