Rand() Funktion in C++



  • Hallo zusammen

    ich bin ziemlich frisch im Thema C++ (habe vorher schon das eine oder andere Projekt mit PHP,CSS,HTML,SQL umgesetzt) möchte es aber gerne lernen, da einem dort wohl wesentlich mehr Möglichkeiten gegeben werden und ich es sehr interessant finde.

    Mit Klassen erstellen und nutzen komme ich schon ganz gut klar, hab da etwas rumgespielt auch was Vererbungen angeht.. ist ja in C++ ganz schick geregelt ^^.

    Nun bin ich dabei mit dem erlernten etwas zu spielen in dem ich mir ein kleines Rollenspiel basteln will, was über die Konsole läuft um mich mit den Funktionen vertrauter zu machen.

    Spinne::Spinne()
    {
    	this->monstername = "Frido";
    	this->lebenspunkte = 80;
    	this->gibtErfahrungspunkte = 20;
    	this->level = 1;
    
    	this->minSchaden = 2;
    	this->maxSchaden = 15;
    	this->getSchadenVonSpinne();
    }
    
    Spinne::~Spinne()
    {
    }
    
    //// Setter ////
    
    //// Getter ////
    int Spinne::getSchadenVonSpinne()
    {
    	this->zufallsSchaden = rand() % this->maxSchaden + this->minSchaden;
    	return this->zufallsSchaden;
    }
    

    Hier bin ich gerade dabei ein paar "Monster" zu erschaffen gegen die man dann irgendwann antreten muss :).

    Das eigentliche Problem:

    Ich habe hier meinem Objekt Spinne einen minimalen Schaden und einen maximalen Schaden verpasst und möchte dann in einer Kampfhandlung einen zufälligen Schaden von min und max generieren.

    Das ganze klappt soweit ganz gut nur das meine rand() Funktion nicht nur bis zur Zufallszahl 15 geht, sondern auch noch die 16 nimmt und verstehe nicht wirklich warum das so ist und wie man es entsprechend einfach lösen könnte.

    Wäre euch für nützliche Antworten sehr dankbar.

    LG
    HEYHO



  • Spiel mal computer und rechne den wert für verschiedene Zufallszahlen aus. Es muss vom maximalen wert noch der minimale wert abgezogen werden.
    rand() ist übrigens veraltet, es gibt den <random> -header.



  • Wenn du alles über rand() wissen willst und warum du es nicht nutzen solltest und was du stattdessen tun solltest:

    https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful

    Wobei für ein Spiel sollte auch rand() locker reichen 😉



  • HEYHO schrieb:

    auch was Vererbungen angeht.. ist ja in C++ ganz schick geregelt ^^

    Nun ja, wenn du schon neu einsteigst und VS benutzt, schau dir gleich mal C# an. .NET ist die Zukunft!



  • C#4Life schrieb:

    HEYHO schrieb:

    auch was Vererbungen angeht.. ist ja in C++ ganz schick geregelt ^^

    Nun ja, wenn du schon neu einsteigst und VS benutzt, schau dir gleich mal C# an. .NET ist die Zukunft!

    Ähem... da darf man getrost geteilter Meinung sein.



  • C#4Life schrieb:

    HEYHO schrieb:

    auch was Vererbungen angeht.. ist ja in C++ ganz schick geregelt ^^

    Nun ja, wenn du schon neu einsteigst und VS benutzt, schau dir gleich mal C# an. .NET ist die Zukunft!

    Vor allem auf *Unix Systemen wie die letzten Jahre gezeigt haben 😉



  • also %15 ergibt maximal 14, wenn du 2 dazu zählst, sind das 16. also immer min + rand % (max - min)!



  • HansKlaus schrieb:

    also %15 ergibt maximal 14, wenn du 2 dazu zählst, sind das 16. also immer min + rand % (max - min)!

    Also ich nehme eher ein geschlossenes Intervall an wenn von max und min gesprochen wird (=beides inklusive).
    Und dann muss man
    min + rand % (max - min + 1)
    rechnen.


Log in to reply