Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Karten geben (https://www.delphipraxis.net/142498-karten-geben.html)

Samufi 29. Okt 2009 11:13


Karten geben
 
Hallo,
ich versuche gerade ein Kartenspiel zu programmieren und bin beim Karten geben stecken geblieben. Mein Plan war, für jeden Spieler eine ListBox (die dann später noch mit Bildern verknüpft werden soll) zu erstellen und die Kartenwerte per Zufallsgenerator dort hineinzuschreiben. Dazu brauche ich aber einen Zufallsgenerator, der schon herausgegebene Werte nicht noch einmal annimmt. Dann könnte die Sache ungefähr so aussehen:
Delphi-Quellcode:
var I,J,SpielerAnzahl,KartenAnzahl,KartenGesamt:Integer;
begin

For I:=1 to SpielerAnzahl do
begin
  For J:=1 to KartenAnzahl do
  begin
    TListBox(Form1.FindComponent('ListeSpieler'+InttoStr(I))).Items.add([Zufallsgenerator](KartenGesamt))
  end;
end;

end;
Mein Problem ist jetzt, dass ich keinen solchen Zufallsgenerator kenne; der, den ich jetzt gefunden habe (random(KartenAnzahl)) würde ja auch mehrmals dieselben Karten ausspucken. ich habe schon überlegt, den Generator in eine Repeat-Schleife zu packen, bis die Bedingung erfüllt ist, dass kein bisher schon aufgetretener Wert heruaskommt aber das wäre äußerst unelegant und könnte zu langen wartezeiten führen. Ich brauche also ein Zufallsgerät für eine "Kugelziehung ohne Zurücklegen" um das mal bildhaft auszudrücken...
Vielen Dank allen schon im Voraus, die sich des Problems annehmen!
Samufi

guinnes 29. Okt 2009 11:18

Re: Karten geben
 
Hast du dir schon mal überlegt, wie im richtigen Leben Karten gegeben werden ? Man bringt die Reihenfolge des Stapels durcheinander und gibt danach von oben.
Vorschlag :
Ein Array, in dem alle Karten geordnet drinstehen
2 Zufallszahlen hintereinander ziehen und die Karten im Array vertauschen
Das ganze dann 1000-10000 mal wiederholen
Dann einfach " von oben " geben

MarcoWarm 29. Okt 2009 11:24

Re: Karten geben
 
Oder:

Alle Karten in einer Liste halten (TList, TStringList) und dann per idx:=random(List.Count-1) eine Karte ziehen und diese nach dem ziehen aus der Liste löschen List.Delete(idx).

Gruß
Marco

Samufi 29. Okt 2009 11:25

Re: Karten geben
 
Danke für die Ansätze! Ich denke, das müsste ich jetzt irgendwie honkrigen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 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