[C/C++] Random Funktion

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von liftishifty, 29. November 2007 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 29. November 2007
    Random Funktion

    Hallo all,

    bin gerade dabei für die Schule ein Kartenspiel auf Konsolenebene zu Programmieren.(31 bzw Knacks oder Schwimmen genannt).

    Bin soweit auch schon fertig,allerdings hab ich das Problem das meine Random Funktion ihre Zahlen mehrfach verteilt.

    Also erstma hier meine Random Funktion:

    Code:
    srand((unsigned)time(NULL));
    Und jetzt hier einmal wie ichs verwendet hab:

    Code:
    Dealerdecks1[0]=Kartendeck[rand()%31];
    Dealerdecks1[1]=Kartendeck[rand()%31];
    Dealerdecks1[2]=Kartendeck[rand()%31];
     
    Dealerdecks2[0]=Kartendeck[rand()%31];
    Dealerdecks2[1]=Kartendeck[rand()%31];
    Dealerdecks2[2]=Kartendeck[rand()%31];
     
    Spielerdeck[0]=Kartendeck[rand()%31];
    Spielerdeck[1]=Kartendeck[rand()%31];
    Spielerdeck[2]=Kartendeck[rand()%31];
    Dealerdecks1,2 und Spielerdeck sind Instanzen meiner Klasse Karten...egal unwichtig^^

    Aufjedenfall wird halt mir Dealerdecks 1 und 2 die 2 3er Stapel Karten erzeugt,die der Dealer ja nunmal bekommt bei diesem Spiel und dann halt Spielerdeck für den 3er Stapel Karten den der Spieler bekommt....

    Mein Problem ist nun das ich mehrfach vorkommende Karten hab( Nur zur info:meiner Klasse Karten also quasi jeder Karte wird einmal ein Kartenwert und einmal ein Kartenname zugewiesen).

    Ich hab Also in den Stapeln beispielsweise 2* Herz Bube oder ähnliches,obwohl das ja nicht sein sollte...Nun wollte ich das ganze umgehen indem ich einfach alle Randomzahlen die bereits von Random erzeugt wurden,von dem nächsten Randombefehl ausschließe. Allerdings hab ich absolut keine ahnung wie das gehen soll...

    Eventuell koennt ihr mir ja helfen!? *lieb hochschau*

    Danke schonmal

    Greetz
     
  2. 29. November 2007
    AW: Random Funktion

    mach doch einfach eine set anweisung für die attribute
    also setSpielerdeck(0); zum beispiel

    und in der set anweisung wird solange eine random zahl erzeugt bis eine karte augegeben wird die noch nicht vorhanden ist

    fertig

    in java würde ich das so machen

    Code:
    public void setSpielderdeck(int pKartenPosition)
    {
     boolean neueKartegefunden = false;
     while(neueKartegefunden != true)
     {
     karte neueKarte = Kartendeck.random();
     //jetzt alle karten im spielerdeck durchlaufen und gucken ob die karte schon vorhanden ist
     // wenn sie noch nicht vorhanden ist wird neueKartegefunden auf true gesetzt und 
     // die karte wird dann der pKartenPosition zugeordnet
     }
    
    }
     
  3. 29. November 2007
    AW: Random Funktion

    da habsch jetzt irgendwie nich so wirklich verstanden ,ich weiss zwar was du meinst aber hab keine ahnung wie ich das umsetzen soll da mir das irgendwie spanisch vorkommt...frag nich warum^^ aber villeicht sollte ich mal meine kartenanweisung zeigen dann erklärt sich glaub ich einiges.

    Code:
    //Deklarieren von Random und Klasse Karten Variablen
     srand((unsigned)time(NULL));
     Karten Kartendeck[31];
     Karten Dealerdecks1[2];
     Karten Dealerdecks2[2];
     Karten Spielerdeck[2];
     
     
     //Werte Zuweisung an alle Karten
     Kartendeck[0].setKartenname("Herz Sieben");Kartendeck[0].setKartenwert(7); 
     Kartendeck[1].setKartenname("Herz Acht");Kartendeck[1].setKartenwert(8);
     Kartendeck[2].setKartenname("Herz Neun");Kartendeck[2].setKartenwert(9);
     Kartendeck[3].setKartenname("Herz Zehn");Kartendeck[3].setKartenwert(10);
     Kartendeck[4].setKartenname("Herz Bube");Kartendeck[4].setKartenwert(10);
     Kartendeck[5].setKartenname("Herz Dame");Kartendeck[5].setKartenwert(10);
     Kartendeck[6].setKartenname("Herz Koenig");Kartendeck[6].setKartenwert(10);
     Kartendeck[7].setKartenname("Herz Ass");Kartendeck[7].setKartenwert(11);
     Kartendeck[8].setKartenname("Kreuz Sieben");Kartendeck[8].setKartenwert(7);
     Kartendeck[9].setKartenname("Kreuz Acht");Kartendeck[9].setKartenwert(8);
     Kartendeck[10].setKartenname("Kreuz Neun");Kartendeck[10].setKartenwert(9);
     Kartendeck[11].setKartenname("Kreuz Zehn");Kartendeck[11].setKartenwert(10);
     Kartendeck[12].setKartenname("Kreuz Bube");Kartendeck[12].setKartenwert(10);
     Kartendeck[13].setKartenname("Kreuz Dame");Kartendeck[13].setKartenwert(10);
     Kartendeck[14].setKartenname("Kreuz Koenig");Kartendeck[14].setKartenwert(10);
     Kartendeck[15].setKartenname("Kreuz Ass");Kartendeck[15].setKartenwert(11);
     Kartendeck[16].setKartenname("Pik Sieben");Kartendeck[16].setKartenwert(7);
     Kartendeck[17].setKartenname("Pik Acht");Kartendeck[17].setKartenwert(8);
     Kartendeck[18].setKartenname("Pik Neun");Kartendeck[18].setKartenwert(9);
     Kartendeck[19].setKartenname("Pik Zehn");Kartendeck[19].setKartenwert(10);
     Kartendeck[20].setKartenname("Pik Bube");Kartendeck[20].setKartenwert(10);
     Kartendeck[21].setKartenname("Pik Dame");Kartendeck[21].setKartenwert(10);
     Kartendeck[22].setKartenname("Pik Koenig");Kartendeck[22].setKartenwert(10);
     Kartendeck[23].setKartenname("Pik Ass");Kartendeck[23].setKartenwert(11);
     Kartendeck[24].setKartenname("Karo Sieben");Kartendeck[24].setKartenwert(7);
     Kartendeck[25].setKartenname("Karo Acht");Kartendeck[25].setKartenwert(8);
     Kartendeck[26].setKartenname("Karo Neun");Kartendeck[26].setKartenwert(9);
     Kartendeck[27].setKartenname("Karo Zehn");Kartendeck[27].setKartenwert(10);
     Kartendeck[28].setKartenname("Karo Bube");Kartendeck[28].setKartenwert(10);
     Kartendeck[29].setKartenname("Karo Dame");Kartendeck[29].setKartenwert(10);
     Kartendeck[30].setKartenname("Karo Koenig");Kartendeck[30].setKartenwert(10);
     Kartendeck[31].setKartenname("Karo Ass");Kartendeck[31].setKartenwert(11);
     
     // Den Decks Randomkarten zuordnen
     
     Dealerdecks1[0]=Kartendeck[rand()%31];
     Dealerdecks1[1]=Kartendeck[rand()%31];
     Dealerdecks1[2]=Kartendeck[rand()%31];
     
     Dealerdecks2[0]=Kartendeck[rand()%31];
     Dealerdecks2[1]=Kartendeck[rand()%31];
     Dealerdecks2[2]=Kartendeck[rand()%31];
     
     Spielerdeck[0]=Kartendeck[rand()%31];
     Spielerdeck[1]=Kartendeck[rand()%31];
     Spielerdeck[2]=Kartendeck[rand()%31];
    ich glaub jetzt sollte jeder wissen was ich meine...
     
  4. 29. November 2007
    AW: Random Funktion

    Ja das Problem ist tatsächlich, dass deine Decks mehrfach vorkommen.
    Um das Problem zu umgehen, würde es reichen, einen Vector zu erstellen, welcher alle Zahlen von 0 bis 31 enthält. dann sagst du einfach:

    Code:
     Dealerdecks1[0]=Kartendeck[Zufallsvector.removeElementAt(rand()%Zufallsvector.size())];
     Dealerdecks1[1]=Kartendeck[Zufallsvector.removeElementAt(rand()%Zufallsvector.size())];
     Dealerdecks1[2]=Kartendeck[Zufallsvector.removeElementAt(rand()%Zufallsvector.size())];
     
     Dealerdecks2[0]=Kartendeck[Zufallsvector.removeElementAt(rand()%Zufallsvector.size())];
     Dealerdecks2[1]=Kartendeck[Zufallsvector.removeElementAt(rand()%Zufallsvector.size())];
     Dealerdecks2[2]=Kartendeck[Zufallsvector.removeElementAt(rand()%Zufallsvector.size())];
     
     Spielerdeck[0]=Kartendeck[Zufallsvector.removeElementAt(rand()%Zufallsvector.size())];
     Spielerdeck[1]=Kartendeck[Zufallsvector.removeElementAt(rand()%Zufallsvector.size())];
     Spielerdeck[2]=Kartendeck[Zufallsvector.removeElementAt(rand()%Zufallsvector.size())];
    
    Und dann werden lediglich die Zahlen/Decks genommen, die noch nicht benutzt wurden, da sie beim "Nehmen" auch gleich aus dem Vector gelöscht werden (bzw. die indizes)

    Ich hoffe, ich konnte dir helfen.
    Das der Code oben Fehler hervorrufen wird, ist sehr stark möglich, da ich ihn nur als Pseudocode benutzt habe um dein Problem und dessen Lösung zu verdeutlichen.

    Mfg - Idefix!
     
  5. 29. November 2007
    AW: Random Funktion

    Jo stimmt^^ leuchtet ein allerdings wär ich nie auf die Idee gekommen nen Vektor zu benutzen aber zum Glück gibts ja Leute die wissen was sie machen

    Werds vill später oder ansonsten morgen noch Testen und ergebnis posten...

    Danke nochmal Bw is an beide raus...ich close solange ma
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.