Je fais un RPG C ++ basé sur le texte et j'essaie de déterminer comment déterminer le montant des dommages que l'ennemi vous frappe. Mon idée est quelque chose comme ça. P>
Dommages causés = RandomintBetween10and20 * Enemylevel p>
De cette façon, il ne frappe pas toujours pour une quantité définie à chaque fois et permet d'y avoir grèves critiques em> (par exemple, si le coup est supérieur à 15, je serais en cours de grève aussi critique) p>
Je suis nouveau à C ++, donc je ne suis pas tout à fait sûr de savoir comment je peux faire cela, toute aide serait grandement appréciée. P>
8 Réponses :
Utilisez Srand () pour initialiser le générateur de nombres aléatoires: http://www.cplusplus.com/reference/clibrary/cstdlib/srand/ p> puis utilisez la fonction http: // www .cplusplus.com / Référence / Clibrary / CSTDLIB / RAND / P> P> rand () code> générer une séquence de nombres aléatoires. P>
@Noah Roberts: Donc, pour un RPG, avons-nous besoin d'aller avec des rngs crypto-sécurité? <_ <
@NOAH: D'accord, mais ne devrait-on pas commencer à attaquer cela avec un couteau plutôt que d'une hache de bataille de niveau 5?
Ajouter Srand () pour A +1. Pas ou sable (). Srand () et Rand () doivent être utilisés ensemble.
Appréciez votre aide Martin. Merci! Passe un bon weekend.
Le seul moyen de "générer" un nombre vraiment aléatoire passe par l'interaction avec un facteur environnemental aléatoire. Ce site Web fournit un service qui vous fait pour vous: http://www.random.org/ P >
Heureux de voir les gens comprendre la différence entre les chiffres réels et pseudo aléatoires :)
Le générateur de nombres aléatoires STDLIB serait un lieu correct pour démarrer: finalement, vous voudrez commencer à utiliser un RNG plus aléatoire. codage de jeu complet em> a une expérience assez décente pour vous aider à démarrer. p> p>
Notez que srand code> doit être appelé une fois b> et plus jamais! (Pas à chaque fois)
@Noah: aucun rng n'est vraiment "vraiment" aléatoire. Tous ne sont Psuedo-aléatoire. Pour ce qu'il demande, l'une de ces options serait "assez aléatoire".
Merci, c'est ce dont j'ai besoin. Apparemment, je ne peux pas définir une réponse acceptée pendant 6 minutes supplémentaires, alors j'attendrai.
@ZAC: Pas vrai. Voir la réponse de Noé. La plupart des machines font i> ont des moyens spécifiques au système de devenir vrai aléatoire (bien que pas aussi bien que quelque chose comme aléatoire.org). Par exemple, / dev / aléatoire code> sur des boîtes Linux est généré à partir de tel./
@Billy: / dev / aléatoire et même aléatoire.org ne sont que des générateurs de nombres pseudo-aléatoires. Si vous remarquez, Room.org indique qu'il offre des nombres aléatoires «vrais» qui sont «meilleurs» que d'autres générateurs de nombres pseudo-aléatoires. Meilleur générateur de nombres aléatoires, sûr ... vraiment aléatoire, nope. Mais nous sommes allés sur une énorme tangente ici.
@ZAC: Je suis désolé, mais vous êtes incorrect. Les deux sources que je mentiontent sont vraiment aléatoires. C'est pourquoi la lecture de / dev / aléatoire code> est incroyablement lente, car il n'y a pas beaucoup de hasard à avoir eu sur un PC typique, tandis que / dev / urandom code> est rapide, car il est rapide, car il est rapide Pseudorandom.
@Billy: Déteste de vous le casser, mais vous êtes incorrect. Il n'y a qu'un premier générateur de nombres aléatoires réelle connu "algorithme" (j'utilise le terme très lâchement là-bas) que nous avons trouvé jusqu'à présent. Chaque solution logicielle est pseudo-aléatoire à des degrés divers. Ce n'est pas parce qu'un générateur de nombres pseudo-aléatoires est meilleur qu'un autre, ne le rend pas vraiment aléatoire: EN.Wikipedia.org/wiki/...
@ZAC: Je ne vois pas comment ce lien prouve votre point. Tout ce qu'il dit, c'est qu'une machine déterministe ne peut pas produire de vrais nombres aléatoires. Ni / dev / aléatoire code> ni aléatoire.org sont générés via des processus déterministes.
@ZAC: Le site aléatoire.org n'est pas une solution logicielle.
@Billy: Vrai aléatoire ne peut pas être calculé. Donc, à moins qu'un PC standard ait un moyen de mesurer certains phénomènes physiques (pour obtenir l'entropie requise) que je ne suis pas au courant, alors / dev / aléatoire doit calculer un numéro Randm et, comme tel, un PRNG et donc pas vraiment aléatoire.
@Zac: afaik / dev / aléatoire code> prend en entropie de divers éléments matériels "décontractés" (le pool d'entropie), par ex. Des mouvements de la souris, des horaires de KeyPress, etc. Voyez en.wikipedia.org/wiki// Dev / Random # Linux , en.wikipedia.org/wiki/tropy_pool#USURE_OBSERVED_EVENT < / a>
@Martin York: Oui, la plupart des PC n'ont pas de nombreuses sources d'entropie, c'est pourquoi la lecture d'une quantité substantielle d'informations provenant de / dev / aléatoire code> prend pour toujours. La plupart des ordinateurs ont toutefois des installations de génération aléatoires limitées, par exemple, par la dérive de l'horloge ou le bruit thermique.
@Billy: aléatoire.org et Ernie Utilisez du matériel pour mesurer les phénomènes physiques (qui sont apparemment Aléatoire). Vous pouvez bien sûr obtenir Matériel approprié à brancher sur votre PC, mais il a un coût associé que la plupart des gens ne sont pas disposés à payer pour (faire la plupart des gens ont vraiment besoin de véritables aléateurs). Donc, oui PC peut générer des nombres vraiment aléatoires, mais la plupart des fabricants de PC ne sont pas disposés à ajouter au coût d'un PC pour quelque chose que la plupart des gens ne se soucient pas. / dev / aléatoire est lent car il essaie d'être bon.
@Billy: Si vous voulez continuer cette discussion, posez la question "/ dev / aléatoire" vraiment aléatoire? "
@Martin: Je n'ai pas besoin de. EN.Wikipedia.org/wiki//dev/random#Linux Déjà l'explique jolie putain bien.
@Billy: Oui, car Wikipedia est une bonne source d'informations précise écrite par les personnes les plus compétentes sur le terrain! J'adore Wikipedia comme point de départ pour la recherche pour trouver d'autres sources autorité B>, mais comme source, ce n'est pas une bonne (même le fondateur de Wikipedias fait cette énoncé exacte).
@Billy: J'ai lu la page Wikipedia. Qui a fourni Ce lien dans la section de référence. Cela explique que / dev / aléatoire utilise un bruit aléatoire du PC pour semer le générateur de nombres aléatoires. Alors que dois-je croire?
@Martin: Si vous ne pouvez pas le modéliser comme autre que aléatoire, il est aléatoire.
@Martin: Peut-être plus approprié qu'un lien Ernie pour les personnes qui souhaitent peut-être ajouter du matériel RNG à un PC: .wikipedia.org / wiki / ... et oui, initialiser un PRNG avec une graine vraiment aléatoire peut augmenter le débit binaire sans sacrifier (beaucoup) aléatoire.
@Gregs: Oui, c'est ce que le monde crypto croit croire. S'il vous plaît n'hésitez pas à poser la question à ce sujet. Voir si la majorité croient que. @Ben: Bien sûr, je suis d'accord avec vous, il est meilleur que Rand () qui n'était pas pointu. @Billy comme argumenter que / dev / aléatoire était vraiment aléatoire. Whoops mon deuxième lien était censé être celui que vous avez fourni. Merci.
Vous devez omettre le mot "vraiment" du titre, car vous ne le signent probablement pas. Vous voulez probablement juste un nombre si vous souhaitez inclure 20 dans la plage, il s'agit d'une plage de 11 numéros: P > int r = rand() % (21 - 10) + 10
En fait, c'est exactement ce dont j'ai besoin. Merci beaucoup!
Au moins celui-ci mentionne la différence. +1
Toutes quelques PC ont en fait un flux d'entrée aléatoire basé sur le bruit thermique, qui inclut une véritable aléatoire. Voir en.wikipedia.org/wiki/hardware_random_number_generator
Vous devez les demander spécifiquement. La fonction rand () est pseudo-aléatoire.
N'oubliez pas. Seulement appeler Srand () Une fois b> dans une application.
@Ben: Pour une définition appropriée de "vrai aléatoire", bien sûr. ;)
@JAlf: Le bruit thermique n'est pas un gaussien blanc non corrélé, si c'est ce que vous en obtenez, mais il y a du bruit non corrélé mélangé au-dessus des autres choses. Et je devinerais que HW RNG est assez bien équipé pour séparer cela.
@Noah: Oui, vous avez besoin de code différent. Mon commentaire a été dirigé contre la déclaration de Wilhelmtell selon laquelle "le vrai aléatoire est pratiquement impossible à réaliser avec un ordinateur personnel", pas l'extrait de code.
Je n'ai qu'un seul problème avec cet extrait: je crains que cela soit biaisé. Si nous supposons que rand () code> est créé (pour commencer par), alors rand ()% n code> est légèrement plus susceptible de produire 0 code> que donner n-1 code>, sauf si n-1 code> est un diviseur de la valeur maximale que rand code> peut générer (ou quelque chose comme ça: p) . Si n code> est petit, ce n'est pas si notable ( 1 000 0001 code> 0 pour 1 000 000 code> 10 par exemple, serait presque créé), mais avec n La croissance de la question est de plus en plus importante. Je ne sais pas un moyen d'obtenir une distribution uniforme dans 0..n code> dans O (1) fois.
Un bon choix serait Si vous n'avez pas encore de support C ++ 11, utilisez Une des options proposées est la Mersenne Twister ( Comme la plupart des autres suggestions, c'est pseudo-aléatoire. Pour que le vrai aléatoire soit plus difficile, mais vous n'avez pas besoin de cela pour un RPG, non? (Pour des nombres aléatoires cryptographiquement forts, envisagez OpenSSL ou, sous Windows, cryptoapi .) p> std :: aléatoire code>, le générateur de nombres aléatoires intégré à C ++. p>
boost :: aléatoire code> . Le nouveau std :: aléatoire code> est basé sur boost :: aléatoire code>, donc c'est fondamentalement la même chose. La documentation comporte plusieurs exemples, y compris Générer des entiers dans une plage . P>
MT19937 CODE>), qui est un bon générateur de nombres pseudo-aléatoires à usage général. P>
Eh bien, je n'appellerais pas C ++ 0x la "dernière version", étant donné que ce n'est pas encore c ++.
Meh, c'est proche. Que diriez-vous, "Version à venir?" J'utilise std :: aléatoire code> tout le temps dans msvc et je sais gcc code> 4.5 le supporte également.
Comme les autres ont dit, peut-être que Rand () sera vraiment suffisant pour vous. Ce qui est important, c'est la graine utilisée pour initialiser le générateur de nombres pseudo aléatoires (l'appel à Srand () est la graine) p>
Mais méfiez-vous, le vrai chaos ne signifie pas que vous avez exactement la même chance de générer une puissance aléatoire possible. p>
Il y a dix ans, j'ai joué avec une génération sonore stochastique. J'avais besoin de plusieurs sources de chaos. P>
Je vous tiens tout simplement que vous savez ceux que j'avais maintenus et trouvés utiles. Bien sûr, car ils ont besoin d'une graine, ils sont pseudo-chaos. P>
1 / pour le numéro de flotteur chaotique entre -1 et 1: calculer la fonction f (x) = cos (exp (x)). exp () croît si vite, après que vraiment peu d'itération, ce qui sort de cos () est le chaos. p>
2 / boulanger transformée: nombre chaotique entre 0 et 1: prendre un certain nombre, multiplier par deux, et encore une fois, quand il est supérieur à 1, soustraire quelque chose de manière qu'il remonte Situés entre 0 et 1. Un beaucoup plus explication précise Baker Transformer . p>
Mais je pense que rand () et srand () vous satisfaire. P>
Pour l'application de votre gamme 10-20, bien sûr, vous étirer / échelle la plage chaotique (0; 1) ou (-1, 1) en multipliant et en compensation afin que le ouput correspond à votre besoin. ; -) p>
La méthode qui utilise module ( Vous devrez inclure de Cours, c'est seulement pseudo-aléatoire. Vous ne pourrez pas obtenir des résultats vraiment aléatoires, en particulier avec % code>) n'est pas un bon choix car la distribution est éteinte. C'est mieux: algorithme code> et graine le générateur avec srand code>. P> rand code>. P> p>
Cela semble sérieusement buggy. Ou c'est juste moi? J'aime où tu vas mais tu n'es pas encore là.
@Gregs ce qui ne va pas avec ça? Je suis prêt à le réparer, mais je ne suis pas sûr de ce que le problème est.
Regarde ceci, il pourrait être utile:
Votre problème est-il la génération de nombres aléatoires? Regardez ici: Stackoverflow.com/questions/3786389/...
Est-il mauvais que je lisais d'abord RPG comme grenade propulsée de fusée?
@Billy Oneal, ce n'est pas mauvais du tout ... c'est basé sur le texte. Au moins que le combattant subira de graves blessures ASCII.
Avez-vous vraiment voulu dire vraiment? Si tel est le cas, vous devez avoir beaucoup d'expérience avec C ++. Utiliser le bruit du microphone peut être rentable :)
Quelqu'un veuillez éditer le titre de la question. Comme beaucoup de gens ont souligné cette question n'a rien à voir avec un véritable générateur de nombres aléatoires (TRNG).