Itemdroprate / Wahrscheinlichkeit
-
Hi zusammen,
vorne weg, nein ich möchte kein MMORPG programmieren ^^ Ich hab mir den Rat der meisten Poster zu nutze gemacht und habe jetzt erst mal Pong und eine Art SpaceInvaders mit der SDL & in OOP "sauber" programmiert

Kommen wir zum SpaceInvader, das Spiel ist so recht langweilig mit Objekten abschießen und Punkte kassieren -.- jetzt möchte ich bei Gegnern/Meteoriten etc... das wenn ich sie vernichte, Items gedropt werden die jeweils eine bestimmte Wahrscheinlichkeit haben. Beispiel: ein "Boostpack" das mich für x Sekunden schneller fliegen lässt oder einen besseren Schuss (Schuss-Stufe2).
Sagen wir mal das Boostpack hat eine Chance das es dropt von 20% und der Schuss-Stufe2 von 0.5% wie gehe ich das Thema jetzt am besten an?
Mir geht es hier in dem Beitrag nur um die Berechnung des Items das dann gedropt wird, wenn überhaupt, kann ja auch sein das keins dropt.
Danke schon mal

- Dennis
-
#include <iostream> using namespace std; #include "MersenneTwister.h" bool GetChance(float percent) { MTRand mtRand; if(percent * 1000 <= mtRand.randInt(100000)) return false; return true; } int main() { int c1 = 0, c2 = 0, c3 = 0, c4 = 0, c5 = 0; for(int i = 0; i < 10000; ++i) if(GetChance(0.1f)) ++c1; for(int i = 0; i < 10000; ++i) if(GetChance(1.0f)) ++c2; for(int i = 0; i < 10000; ++i) if(GetChance(5.0f)) ++c3; for(int i = 0; i < 10000; ++i) if(GetChance(50.0f)) ++c4; for(int i = 0; i < 10000; ++i) if(GetChance(100.0f)) ++c5; cout << "0.1%: " << c1 << endl; cout << "1%: " << c2 << endl; cout << "5%: " << c3 << endl; cout << "50%: " << c4 << endl; cout << "100%: " << c5 << endl; }MfG
-
Hey super, danke schön @ceplusplus Damit kann ich was anfangen

Grüße, Dennis
-
Wird dieser Header verwendet?
http://www-personal.umich.edu/~wagnerr/MersenneTwister.h
-
Also ich hab diesen Header eingebunden, da ich aber die vs05 Version benutze wirft diese Header-Datei ein paar Fehler wegen fopen (fopen_s) usw...
Hab dies noch in die Header-Datei geschrieben:
#pragma warning(disable: 4312) #pragma warning(disable: 4800) #pragma warning(disable: 4996) #pragma warning(disable: 4146)
-
Peppie schrieb:
Also ich hab diesen Header eingebunden, da ich aber die vs05 Version benutze wirft diese Header-Datei ein paar Fehler wegen fopen (fopen_s) usw...
Hab dies noch in die Header-Datei geschrieben:
#pragma warning(disable: 4312) #pragma warning(disable: 4800) #pragma warning(disable: 4996) #pragma warning(disable: 4146)Wie wärs statt dem disablen von Warnings einfach mit dem Ersetzen der Funktionen durch Verbesserte (-> _s) ?
@Threadersteller:
Setze die verschiedenen Items einfach in einen bestimmten Wertebereich. 0-100
Also z.b. 1-50 und dann berechne eine Zufallszahl (rand() % 100 + 1) und falls die Zufallszahl zw. 1 und 50 liegt wird das Item gedropt.
Das ganze kannst du ja mit beliebig viele Items machen. bzw. Itemkategorien und dann weiter differenzieren.z.b.: 1-50 Normalitem 51-80 SpecialItem 81-100 UniqueItemNicht vergessen vorher srand(timeGetTime()) aufzurufen

Hab ich schon öfter verwendet...funktioniert ganz gut
Du kannst auch Zahlen zwischen 1 und 1000/10000 berechnen lassen...dann brauchst du nicht weiter zu differenzieren weil du einen größeren Wertebereich hast.Ist zwar nicht so tragisch, aber dafür extra ne fremde .h verwenden mit Funktionen die du gar nicht brauchst ist eher sinnlos.
-
Kuldren schrieb:
aber dafür extra ne fremde .h verwenden mit Funktionen die du gar nicht brauchst ist eher sinnlos.
Naja, wenn man bedenkt, wie gut der Zufallsgenerator
rand()ist (siehe auch hier)...Trotzdem würde ich nicht einfach irgendeinen Header verwenden. Boost hat beispielsweise auch eine grosse Auswahl an Pseudozufallszahlengeneratoren. Ansonsten kann man auch einen selber programmieren.

-
Hier haben wir mal einen ganz interessanten Entwurf erstellt:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-47483-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-w�rfel-and-start-is-50.html