2016-03-30 16 views
-1

Hallo, alles, was ich habe in diesem Problem für die längste Zeit steckte und habe es in den letzten Tagen für Stunden auf einmal gearbeitet. Ich möchte ein Deck mit 52 Karten in einem Vektor ähnlich dem folgenden Code mischen, weiß aber nicht, wie ich es machen soll. Alle Hilfe wäre willkommen. Hoffentlich wird es in der grundlegendsten Form von Code möglich sein, wie ich einen Einführungskurs nehme. (Dies ist nicht die vollständige Aufgabe meiner Aufgabe).Speichern und mischen ein Kartenspiel mit einem Vektor C++

#include <vector> 
#include <algorithm> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    vector<int> vi; 


    for(int i=1; i <= 10; i++) 
     vi.push_back(i); 

//before shuffling 
    cout <<"Before shuffling: " << endl;; 
    for(int i=0; i < 10; i++)//printing index: value 
     cout << i << ": " << vi[i] << endl; 

random_shuffle(vi.begin(), vi.end()); 

cout << "\n ------------ \n"; 

//after 
cout <<"After shuffling: " << endl; 
for(int i=0; i < 10; i++) 
    cout << i << ": " << vi[i] << endl; 
} 

so dass die Code-Nummern randomisiert aber ich Deck von Karten randomisieren will ...

und nach herauszufinden, wie das zu tun, ich brauche Spieler 1 zu speichern, dies als sein Deck 7 zufälliger Karten als ein Vektor, der zurück zu seinem eigenen Vektor drückt.

+0

Also, was ist 'Z'? Vielleicht ein [mcve] post? – juanchopanza

+0

Sie haben den Vektor gemischt. Das einzige Problem ist 'a' und' z', beide nicht deklariert – DimChtz

+0

oh, a und z soll 1 und 10 sein, sorry lass mich das jetzt bearbeiten. – Breindy

Antwort

2

Im neuen Code, den Sie verwenden möchten std::shuffle, nichtstd::random_shuffle.

Mit ihm ein Karten schlurfend wie folgt aussehen kann:

#include <random> 
#include <algorithm> 
#include <iterator> 
#include <iostream> 
#include <numeric> 

int main() { 
    std::vector<int> cards(52); 

    std::iota(cards.begin(), cards.end(), 1); 

    std::random_device rnd; 
    std::mt19937_64 gen(rnd()); 

    std::shuffle(cards.begin(), cards.end(), gen); 

    std::copy(cards.begin(), cards.end(), std::ostream_iterator<int>(std::cout, " ")); 
    std::cout << '\n'; 
} 
+0

Echte Neugier: Warum hast du shuffle über random_shuffle bevorzugen? – kfsone

+1

@kfsone 'random_suffle' ist im aktuellen Standard veraltet und wird in C++ 17 entfernt. – NathanOliver

+1

@ kfsone: Die Version von random_shuffle, die er verwendet, hat eine schreckliche Spezifikation. Zum Beispiel war es ursprünglich verboten, 'rand()' zu verwenden, um seine Zufallszahlen zu generieren, so dass es keinen zuverlässigen Weg gibt, seinen Generator zu säen ("srand" kann oder darf nicht funktionieren - es sollte nicht mit einer korrekten Implementierung von C++ 98/03, darf aber in C++ 14). –