Spielkarten mischen
-
Hi und guten Abend
Möchte ein kleines Kartenspiel schreiben in C++.
Doch mir fehlt grad die Idee für einen realistischen Mischalgorithmus.
( Sicher irgendwas mit rand()
)
Kennt jemand vielleicht Weblinks zum Thema, oder hat grad selber ne tolle Idee?Ich würd jetzt aus dem Bauch raus eine Zufallszahl zwischen 1 und 52 generieren und die entsprechende Karte an erste Stelle legen und so weiter. Fänd ich aber nicht sehr prickelnd.
Also besten Dank schonmal vorweg
GrüsseEl Bandito
-
pack die Zahlen von 1 bis 52 (wenn du willst, kannst du auch 52 Spielkarten nehmen) aufsteigend in ein Array/vector<>/list<> und dann lass random_shuffle() dort drüberlaufen.
-
Oh, danke für die schnelle Antwort.
Muss ich bei random_shuffle was beachten (seeden oder so), oder ist der schön gleichverteilt?
und welcher Container (array/vector/list) ist den am schnellsten gemischt?
-
El Bandito schrieb:
Muss ich bei random_shuffle was beachten (seeden oder so), oder ist der schön gleichverteilt?
Ja, vernünftigen Startwert für den Zufallsgenerator solltest du schon vorgeben (leider ist nicht spezifiziert, welchen er per default verwendet, also entweder du schaust dir den Quelltext in der <algorithm> an oder du übergibst einen eigenen Zufallsgenerator, den du dann auch selbst initialisieren kannst.
und welcher Container (array/vector/list) ist den am schnellsten gemischt?
Afaik hat er lineare Laufzeit. (allerdings bin ich mir nicht so sicher, ob du list verwenden kannst - irgendwas in meinem Unterbewußtsein schreit "random access iterator")
-
und welcher Container (array/vector/list) ist den am schnellsten gemischt?
Afaik hat er lineare Laufzeit. (allerdings bin ich mir nicht so sicher, ob du list verwenden kannst - irgendwas in meinem Unterbewußtsein schreit "random access iterator")[/quote]Ja, die Referenz sagt random access, was ja irgendwie logisch scheint

CStoll schrieb:
El Bandito schrieb:
Muss ich bei random_shuffle was beachten (seeden oder so), oder ist der schön gleichverteilt?
Ja, vernünftigen Startwert für den Zufallsgenerator solltest du schon vorgeben (leider ist nicht spezifiziert, welchen er per default verwendet, also entweder du schaust dir den Quelltext in der <algorithm> an oder du übergibst einen eigenen Zufallsgenerator, den du dann auch selbst initialisieren kannst.
Hm ja er gibt jedesmal die gleichen Werte aus. Muss mal weiter wühlen.
Danke soweit.
Bye
-
Hast Du mal srand benutzt um den seed für rand zu setzen? Auch wenn es vielleicht nicht standardisiert ist verwenden wohl die meisten random_shuffle-implementierungen rand.
-
Ja wollt ich grad schreiben.
Meine Implementierung (gcc: libstdc++) nutzt rand() als default.
SGI hat nen eigenen Random Generator der scheints normalverteilt ist. --> http://www.sgi.com/tech/stl/RandomNumberGenerator.html
Gibts da was frei verfügbares? Im Standard ist ja nichts drin.
-
Ok hab was: tr1::random_device

Danke
-
Ich lese da "uniformly distributed", also gleichverteilt. Keine Normalverteilung. Verschiedene andere Zufallsgeneratoren findest Du bei boost. Aber eigentlich sollte rand doch für Deine Zwecke genügen?
-
Jester schrieb:
Aber eigentlich sollte rand doch für Deine Zwecke genügen?
Eigentlich schon :p
Bin halt Perfektionist
-
Wenn dir das normale rand() nicht reicht, mußt du einen Generator selber schreiben - hier hast du eine Auswahl.