Funktion zum Karten mischen?
-
Hallo,
ich will/muss ein Computerspiel in c++ programmieren bei dem zu Beginn des Spiels die Karten gemischt werden und dann an zwei Spieler gleichmäßig verteilt werden...
Ich hab eine Klasse Spiel, Spieler, Stapel und Karte...
kann mir vielleicht jemand sagen wie ich das mit dem mischen realisieren kann?
Hab schon einiges über rand() gelesen, aber es darf ja keine Karte zweimal vergeben werden...bitte helft mir
lg Stefanie
-
Auf die Schnelle: Weise jedem Element eine zufällige Zahl zu und sortiere dann.
-
hmm das ist bei 32 Karten aber bisschen uneffizient... soweit war ich auch schon
-
Angenommen dein Kartenspiel liegt als Array oder STL-Container vor. Dann
sollte std::random_shuffle() das Gewünschte tun.
-
Deffimausi schrieb:
hmm das ist bei 32 Karten aber bisschen uneffizient... soweit war ich auch schon
Ähm, was ist Deine Zielplattform?
Bei 32 Spielkarten kannste fast alles machen ohne das es zu langsam wird.
-
plattform is microsoft... hab halt gedacht es gibt vielleicht noch ne einfachere Lösung ...
-
Hallo,
Schau doch mal in diesen Thread
http://www.c-plusplus.net/forum/viewtopic-var-t-is-106020-and-highlight-is-karten.htmlCiao
-
hey danke, das ist genau mein Problem, hab das leider selber nicht gefunden...
vector<int> vect; for( int i=0; i<32; ++i) vect.push_back(i); random_shuffle(vect.begin(), vect.end()); vector<int> vect1, vect2; for( int i=0; i<16; ++i) { vect1.push_back(vect[i]); vect2.push_back(vect[i+16]); }
aber wie initialisier ich da die Karten?
bzw. was genau macht dein Code da nacheinander?
-
aber wie initialisier ich da die Karten?
Ich würde jetzt einfach sagen, dass jede Karte eine feste Zahl hat (also Schell 7 ist 0, Schell 8 dann 1 (oder Herz 7 ist 1, je nachdem), falls du jetzt darauf hinaus wolltest.
bzw. was genau macht dein Code da nacheinander
vector<int> vect; // erzeugen eines dynamischen Arrays for( int i=0; i<32; ++i) vect.push_back(i); // füllen mit Zahlen von 0 bis 31 (0 am Anfang, 31 am Ende - sollte klar sein) random_shuffle(vect.begin(), vect.end()); // zufaelliges durcheinander würfeln der Zahlen vector<int> vect1, vect2; for( int i=0; i<16; ++i) { vect1.push_back(vect[i]); // jedem Kartenstapel jetzt Karten geben, der erste nimmt die Karten der Indizes 0-15 und der zweite die der Indizes 16-31. vect2.push_back(vect[i+16]); // da diese ja ungeordnet waren hat man zufaellige Kartenstapel }
-
super dankeschön ich glaub damit komm ich weiter