Spiel geht bei mir nicht



  • Hallo,

    ich habe mal eine Frage! Wir sollten für die Schule ein Programm schreiben "Würfelspiel".....
    Das Programm habe ich geschrieben, allerdings habe ich nie ein Gewinner sondern immer unentschieden????

    Vielleicht könnt Ihr mir ja weiterhelfen

    Quellcode

    *.h

    #ifndef PLAYERH
    #define PLAYERH
    
    class Player
    {
          private:
            int Score;
    
          public:
           void gamble();
           int getscore();
    };
    
    #endif
    

    Quellcode

    *.cpp

    #include <iostream.h>
    #include <string.h>
    #include "Player.h"
    #include <time.h>
    
    void Player::gamble()
    {
     time_t t;
     int augen;
     int i;
    
     srand((unsigned) time(&t));
    
     score=0;
    
     for(i=0;i<5;i++)
     {
       augen=rand()%6+1;
       cout<<augen<<',';
       score=score+augen;
     }
     cout<<'Punktestand:'<<score<<endl;
    
    }
    
    int Player::getscore()
    {
    
    return Score;
    };
    
    Quellcode
    
    #pragma argsused
    #include "Player.h"
    #include <conio.h>
    #include <iostream.h>
    
    int main(int argc, char* argv[])
    {
    Player s1,s2;
    
    cout<<'erster Spieler';
    s1.gamble();
    
    cout<<'zweiter Spieler';
    s2.gamble();
    
    if(s1.getscore() > s2.getscore())
    {
    cout<<'erster Spieler gewinnt';
    }
    if(s1.getscore() < s2.getscore())
    {
    cout<<'zweiter Spieler gewinnt';
    }
    
    if(s1.getscore() == s2.getscore())
    {
    cout<<'unentschieden';
    }
            return 0;
    }
    

    Aufgabenstellung:
    Simulation eines Würfelspiels jeder Spieler würfelt 2x und die augen werden aufsummiert.... der die höchste punktzahl hat gewinnt
    wir sollten das mit gamble() und getscore() machen

    Danke schon mal für eure Hilfe....



  • Zuerst einmal pack deinen Code in C/C++ Tags, dann kann man das besser lesen.

    Hast du schon mal den Debugger benutzt, d.h. kriegst du immer dieselben Zufallswerte.
    Die Initialisierung der Zufallswerte mittels srand solltest du auch nur einmal am Anfang deines Programmes machen (z.B. Anfang der main-Funktion).
    Es reicht dafür auch 0 als Parameter zu übergeben:

    srand((unsigned) time(0));
    

    bzw. besser in C++

    srand(static_cast<unsigned int>(time(0)));
    

    P.S. Du schreibst, daß die Summe von 2 Würfelergebnissen berechnet werden soll, verwendest aber 5 in der Schleife.



  • srand(static_cast<unsigned int>(time(0)));

    damit gehts leider auch nicht 😞

    sorry hab die aufgabenstellung falsch beschrieben
    es wird simuliert, dass jeder spieler 5x würfelt nicht zweimal....



  • Wo hast du "score" deklariert ?
    "score" != "Score".
    Auf Groß- und Kleinschreibung achten !
    Falls ich mich geirrt haben sollte, dann liegt das sicher daran, dass du keine Code-tags verwendet hast.... 😃

    Grüße
    Blue



  • nein ich bekomme immer andere zufallswerte
    aber bei player 1 und zwei jeweils die gleichen

    erster Spieler 5,3,2,4,8 Punktestand 22
    zweiter Spieler 5,3,2,4,8 Punktestand 22

    unentschieden



  • das mit Score 🙂 habe ich abgeändert
    bei erster und zweiter Spieler habe ich habe ich auch die Hochkomma's (') durch Anführungszeichen (") ersetzt
    ........
    mit code-tags habe ich noch nichts gemacht, das hatten wir in der Schule auch noch nicht gemacht...bin doch noch ein Anfänger



  • es geht bei mir
    danke für eure hilfe
    👍 👍 👍 👍 👍



  • Code-Tags ist kein C++-Programmier-Konzept sondern eine tolle Funktion dieses Forums.
    Damit kannst du deinen C++-Code auch hier im Forum farblich so darstellen wie in den meisten C++-IDEs.
    Nehmen wir besipielsweise deinen ersten Post. Da wo dein Code drin steht. Drücke da einmal auf "editieren". Mit "editieren" kannst du vergangene Beiträge nachträglich korrigieren.

    Unter den Smilies solltest du jetzt den Button "C/C++" sehen.
    Wenn du den drückst erscheint folgendes Konstrukt : "[ cpp ][ /cpp ]".
    Zwischen den beiden geklammerten Ausdrücken musst du deinen Code einfügen.

    Dann bekommst du z.B. folgendes:

    real Vec::angleRadian(const Vec& a,const Vec& b){
    
    		real result;
    		result = acos(dot(a,b)/(magnitude(a)*magnitude(b)));
    		return result;
    }
    

    Grüße
    Blue



  • Ich würde mal vermuten, daß der srand()-Aufruf an der falschen Stelle steht - die beiden gamble()-Aufrufe folgen so dicht hintereinander, daß der Zufallsgenerator für beide Spieler mit dem selben Wert initialisiert wird (mit sehr viel Glück und gutem Timing könntest du es schaffen, dort verschiedene Werte zu erhalten ;). srand() benötigst du genau einmal am Start des Programms, danach kann der Zufallsgenerator alleingelassen werden.

    Edit:

    Blue5teel schrieb:

    Drücke da einmal auf "editieren". Mit "editieren" kannst du vergangene Beiträge nachträglich korrigieren.

    Er nicht - er ist nur Gast. Aber ich war mal so frei, dort oben die CPP-Tags einzufügen.


Anmelden zum Antworten