Le rand !
Fermé
spriatez
Messages postés
180
Date d'inscription
lundi 6 décembre 2010
Statut
Membre
Dernière intervention
8 mai 2017
-
Modifié par spriatez le 30/09/2015 à 19:46
spriatez Messages postés 180 Date d'inscription lundi 6 décembre 2010 Statut Membre Dernière intervention 8 mai 2017 - 6 oct. 2015 à 10:24
spriatez Messages postés 180 Date d'inscription lundi 6 décembre 2010 Statut Membre Dernière intervention 8 mai 2017 - 6 oct. 2015 à 10:24
2 réponses
Utilisateur anonyme
30 sept. 2015 à 19:48
30 sept. 2015 à 19:48
euh perso, je vois que tu réinitialise le germe qui fait l'aléatoire a chaque fois que tu lance la fonction, et c'est pas top. mieux vaut faire ton srand(time(NULL)) dans ton main ! c'est probablement pour ca que ca a cet effet la !
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
30 sept. 2015 à 21:06
30 sept. 2015 à 21:06
Bonjour,
Effectivement, 2 problèmes.
srand(...) n'est à lancé qu'une fois. Donc, il faut mettre cette instruction dans une fonction d'initialisation comme le main() mais surtout pas dans la fonction de génération d'aléa.
Ensuite, l'utilisation du modulo induit des tirages biaisées sur les bits de poids faibles. Il vaut la règle de 3.
Sinon, si ton projet est la génération aléatoire d'un nombre entre 1 et 100, tu penses vraiment que tu peux utiliser cette fonction ???
Cdlt,
Effectivement, 2 problèmes.
srand(...) n'est à lancé qu'une fois. Donc, il faut mettre cette instruction dans une fonction d'initialisation comme le main() mais surtout pas dans la fonction de génération d'aléa.
Ensuite, l'utilisation du modulo induit des tirages biaisées sur les bits de poids faibles. Il vaut la règle de 3.
Sinon, si ton projet est la génération aléatoire d'un nombre entre 1 et 100, tu penses vraiment que tu peux utiliser cette fonction ???
Cdlt,
spriatez
Messages postés
180
Date d'inscription
lundi 6 décembre 2010
Statut
Membre
Dernière intervention
8 mai 2017
30 sept. 2015 à 21:20
30 sept. 2015 à 21:20
Mon code en entier :
Il est bien placé dans le main non ? :o le mettre au dessus de l'instruction unsigned short ?
Je ne sais trop comment faire autrement que par un rand ? :(
#include <stdio.h> #include <stdlib.h> #include <time.h> // A>b int main() { unsigned short int attaque_joueur; srand(time(NULL)); attaque_joueur = rand()%(170-80) +90; // printf("%hu", attaque_joueur); // Pour afficher et tester. return 0; }
Il est bien placé dans le main non ? :o le mettre au dessus de l'instruction unsigned short ?
Je ne sais trop comment faire autrement que par un rand ? :(
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
30 sept. 2015 à 21:31
30 sept. 2015 à 21:31
Ah, tu relances ton programme autant de fois que tu as besoin de nombres aléatoires ? Ca serait bien mieux de faire une fonction "generation()" et de la mettre dans une boucle while() ou for() pour afficher plusieurs nombres aléatoires avec la même graine.
spriatez
Messages postés
180
Date d'inscription
lundi 6 décembre 2010
Statut
Membre
Dernière intervention
8 mai 2017
30 sept. 2015 à 21:58
30 sept. 2015 à 21:58
Eh bien je veux faire un tour par tour. En gros lorsque j'attaque, l'ennemi attaque automatiquement avec un rand aleatoir lui aussi.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
30 sept. 2015 à 22:09
30 sept. 2015 à 22:09
Ben dans ce cas, tu fais une boucle whille() et à chaque fois que tu appuies sur une touche, tu provoques un nouvel affichage.
Quoi qu'il en soit, si tu souhaites maintenir ta solution, il faudra soit attendre quelques secondes avant de relancer ton programme, ou alors d'utiliser autre chose que time(NULL) pour initialiser la graine.
Quoi qu'il en soit, si tu souhaites maintenir ta solution, il faudra soit attendre quelques secondes avant de relancer ton programme, ou alors d'utiliser autre chose que time(NULL) pour initialiser la graine.
spriatez
Messages postés
180
Date d'inscription
lundi 6 décembre 2010
Statut
Membre
Dernière intervention
8 mai 2017
30 sept. 2015 à 22:19
30 sept. 2015 à 22:19
Bonne idée ! merci :)
Par contre, comment l'initialiser autrement ? j'ai chercher un peu mais je ne trouve pas vraiment comment faire autrement ?
Par contre, comment l'initialiser autrement ? j'ai chercher un peu mais je ne trouve pas vraiment comment faire autrement ?