52 Karten Mischen und an Spieler austeilen



  • Nexus schrieb:

    Oder machst du auch alle Destruktoren präventiv virtuell, weil du die Klasse möglicherweise mal polymorph benutzen könntest? Oder alle Funktionen als Templates, weil du vielleicht verschiedene Typen benötigen könntest?

    Sind aber beides Dinge, die man später nur an einer Stelle ändern muss...
    Das mischen braucht man nicht nur an einer Stelle - bei vielen Skat-Spielen wird neben dem mischen vorm Austeilen auch das nochmalige Mischen nach dem Reizen(zu dem die Karten meist automatisch geordnet wurden) angeboten - damit ein Gegner aus der Position der Karte, die man wählt keine Vorteile bekommen könnte.

    Außerdem ist es in meinen Augen eine Sache der Symmetrie:
    Das Ordnen bekommt logischerweise eine extra Fkt(weil spielabhängig) und damit sollte auch das Mischen eine Fkt. bekommen.

    Templates würde ich hier definitiv nutzen, alleine schon weil ich nicht weiß, ob ich dem Spieler einen vector oder ein tr1::array oder am besten ein Array auf dem Stack spendiere.
    Und auch hier sehe ich wieder keinen Nachteil zum typedef auf den Container oder diesen jedesmal auszuschreiben.

    Ist wohl geschmackssache - und ich wil jz den Thread auch nicht so lang vollspammen, bis wir ganz vom Thema abgekommen sind (huch, zu spät ;D)

    bb



  • Ich Danke euch für die Antworten werde mir mal die Links von Nexus vornehmen.

    @Nexus: Wie würde man die Befehle konkret verwenden?

    operator[] und erase()

    std::random_shuffle()



  • operator[] und erase() sind Memberfunktionen deines STL-Containers, z.B. std::vector . Der STL-Algorithmus std::random_shuffle() ist eine freie Funktion.

    Codebeispiele und Dokumentation findest du hier:

    Nexus schrieb:

    Als Nachschlagewerk zur Standardbibliothek kannst du www.cplusplus.com konsultieren.

    Aber damit du diese auch richtig verstehst, solltest du vielleicht zuerst die Artikel lesen (mindestens Teil 1 und 2). Zögere nicht, bei Problemen Fragen zu stellen!



  • Ich werd' mir mal die Artikel durchlesen und schauen, ob ich durchsteige.
    Habe lange nicht mehr in c++ programmiert. aber wird schon gehen.
    Ich komme sicher auf das Angebot zurück und frage 🙂



  • Hab auch mal mit std::random_shuffle nen Kartenspiel gemacht. Hab dabei gemerkt, dass sehr oft die selbe Reihenfolge vorkam bei 52 Karten. Also habe ich die Funktion eine zufällige oft zwischen 1-50 durchgeführt. Diese Zufallszahl kam vom Mersenee Twister. Damit habe ich gute Mischergebnisse erreicht.
    lg



  • L33TF4N schrieb:

    Hab auch mal mit std::random_shuffle nen Kartenspiel gemacht. Hab dabei gemerkt, dass sehr oft die selbe Reihenfolge vorkam bei 52 Karten. Also habe ich die Funktion eine zufällige oft zwischen 1-50 durchgeführt. Diese Zufallszahl kam vom Mersenee Twister. Damit habe ich gute Mischergebnisse erreicht.
    lg

    welche stl? die vom msvc?



  • unskilled schrieb:

    L33TF4N schrieb:

    Hab auch mal mit std::random_shuffle nen Kartenspiel gemacht. Hab dabei gemerkt, dass sehr oft die selbe Reihenfolge vorkam bei 52 Karten. Also habe ich die Funktion eine zufällige oft zwischen 1-50 durchgeführt. Diese Zufallszahl kam vom Mersenee Twister. Damit habe ich gute Mischergebnisse erreicht.
    lg

    welche stl? die vom msvc?

    Nutze Visual C++ 2008 Prof.



  • L33TF4N schrieb:

    Hab auch mal mit std::random_shuffle nen Kartenspiel gemacht. Hab dabei gemerkt, dass sehr oft die selbe Reihenfolge vorkam bei 52 Karten.

    Hast du mit srand() gesät?

    Ich habe bisher meist rand() benutzt, unter anderem in Spielen – es reicht eigentlich für sehr viele Alltagsdinge. Aber je nach Anwendung ist die Zufälligkeit vielleicht ungenügend.

    Übrigens kannst du als drittes Argument von std::random_shuffle einen Zufallsgenerator übergeben, damit du den Algorithmus nicht neu programmieren musst.



  • Hallo Sticky36,

    KARTEN KartenOBJ[51]; //initialisierung eines Arrays aus 52 Objekten der Klasse KARTEN

    Hast du vorher evtl. in BASIC programmiert?

    In C sowie in C++ wird immer die Anzahl der Elemente angegeben (nicht der oberste Index!), d.h. du müßtest dann auch

    KARTEN  KartenOBJ[52];         //initialisierung eines Arrays aus 52 Objekten der Klasse KARTEN
    

    schreiben.

    Setze dich jedoch besser mit std::vector<>, std::list<> etc. aus der STL auseinander.
    Auch dort wird dann immer die Anzahl angegeben:

    std::vector<KARTEN> Karten(52); // Hinweis: nur als lokale Variable so zu benutzen
    
    // als Member:
    // in Klassendeklaration
    std::vector<KARTEN> Karten;
    // in Konstruktor
    Spieler::Spieler()
     : Karten(52) // <- Initialisierungsliste
    {
    }
    


  • Nein. habe ich nicht. Iss einfach ein ein Denkfehler gewesen den ich bereits geändert habe. aber danke 🙂

    Ich bin gerda dabei mich schlau zu machen 😉


Anmelden zum Antworten