string feld mischen



  • Hallo
    Kurze frage,wie kann ich strung Feld mischen???
    Oder habe ich falsch angefangen?
    Hat jemand eine besere Idee?
    jo Vielen Dank!!!

    string bild[13]={"2 ","3 ","4 ","5 ","6 ","7 ","8 ",
    "9 ","10 ","A ","B ","D ","K "};
    string farbe[4]={"Herz","Kreuz","Pik","Karo"};

    class Karte{
    private:
    string karte[52];
    public:
    Karte();
    void allezeigen();
    void kartenmischen();

    };

    Karte::Karte(){
    int k=0;

    for(int b=0;b<13;b++)
    { for(int f=0;f<4;f++)
    { karte[k]=bild[b]+farbe[f];
    k++;
    }
    }
    }



  • random_shuffle ist dein freund



  • Und im Intresse der performance wuerd ich die Definition deiner daten in das halten was sie sind ... nämlich predefinierte werte, also Enums.

    Und nur zur ausgabe aufm Bildschirm irgendwelche Strings erzeugen (kommt dann auch der Trennung von daten und Darstellungsklassen zu gute).
    Und du kannst spaeter ganz schnell das Haessliche Franzoesiche Blatt durch nen schoeneres Deutsches austauschen (Eichel Gruen Rot Schell) !!!

    enum BildT
    {
    Zwei = 0,
    Drei,
    Vier
    // ...
    Koenig,
    Ass
    };
    enum FarbT
    {
    Karo,
    Pik,
    Kreuz,
    Herz
    };

    Das naechste ... benenne die Klassen besser was sie wirklich sind.

    class Karte{
    private:
    string karte[52];

    Was was 52 dinger hat ... ist definitiv keine Karte, ... ne Karte hat ein Bild und ne Farbe !!! was du meinst iss nen Blatt oder Kartenset ^^

    class Karte
    {
    public:
    Karte(BildT bild,FarbT farbe);

    // vergleichen sollte man karten ziemlich simpel, genau so wie sortieren ...
    operator bool ==(const Karte &rx) const;
    operator bool !=(const Karte &rx) const;
    operator bool >(const Karte &rx) const;
    operator bool <(const Karte &rx) const;

    };

    // zum "Anzeigen " brauchst dann eher die Strings ... dazu solltes dir ne Klasse schreiben, die die Namen(Strings) haelt, schreiben ... wo man die namen auch simpel austauschen kann, und mittels memberfunktion die namen holen kann ...

    class BlattNamen
    {

    public:
    const std::string & getFarbName(FarbT farbe) const; // nur ref auf vorhandenen String
    const std::string & GetBildName(BildT bild) const; // nur ref auf vorhandenen String
    std::string getCardName(FarbT farbe,BildT bild) const; // string wird zusammengebaut und nicht nur referenziert ...
    };

    class Blatt
    {
    public:
    std::vector<Karte> getGemischtesBlatt() const;
    private:
    // an der Stelle braucht man eh kaum nen zugriff ueber index, sondern nen eher ne sortierung ... also set !
    std::set<Karte> mKarten;
    };

    Das waern nur meine Vorschlaege.
    Vorteile, Hasst du ne relativ gut abstrahierte Darstellungsschicht, kannst deine KartenSet klassen fuer was weiss ich fuer andere Spiele Impls auch noch verwenden ....
    Die klassen sind unvollstaendig definiert, also die benoetigten CTors und Add funktionen solltest selber noch hinzufuegen ....

    Ciao ...


Anmelden zum Antworten