Nombre aleatoire [Résolu]

Signaler
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
12 février 2009
-
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
-
Bonjour à tous,
    Je développe actuellement une bataille navale en console. Pour placer les bateaux du PC et les tirs du pc, il faut que je crer un nombre aleatoire pour les coordonnés, ce que je fait avec :
    srand(time(NULL));
    X = ((rand() % (10 - 1 + 1)) + 1);
Or les nombres sortis sont très souvent les même et se situent toujours dans la diagonale de la grille. Quelqu'un sait-il pourquoi, y a-t-il une autre solution pour créer un nombre aléatoire plus "fiable"?
voici le main (Ce n'est que le début mais ca ne sert à rien que je continu tant que ce problème n'est pas réglé...) :

int main()
{
    SetConsoleTitle("Bataille navale");
    system("mode con: cols=25 lines=25");
    int X, Y;
    Espace();//Dessine la grille
    srand(time(NULL));
    X = ((rand() % (10 - 1 + 1)) + 1);
    srand(time(NULL));
    Y = ((rand() % (10 - 1 + 1)) + 1);
    gotoxy(X-1+X, Y+Y);//Pour placer un "point" dont les coordonnés sont les nbrs aléatoire
    Color(0,12);
    printf(" ");
    getch();
    return 0;
}
le resultat (la grille est normale, mais les points toujours dans les cases qui contiennent un "*", la diagonale) :
 0 1 2 3 4 5 6 7 8 9
+-------------------+
¦* ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦A
+-+-+-+-+-+-+-+-+-+-¦
¦ ¦* ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦B
+-+-+-+-+-+-+-+-+-+-¦
¦ ¦ ¦* ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦C
+-+-+-+-+-+-+-+-+-+-¦
¦ ¦ ¦ ¦* ¦ ¦ ¦ ¦ ¦ ¦ ¦D
+-+-+-+-+-+-+-+-+-+-¦
¦ ¦ ¦ ¦ ¦* ¦ ¦ ¦ ¦ ¦ ¦E
+-+-+-+-+-+-+-+-+-+-¦
¦ ¦ ¦ ¦ ¦ ¦* ¦ ¦ ¦ ¦ ¦F
+-+-+-+-+-+-+-+-+-+-¦
¦ ¦ ¦ ¦ ¦ ¦ ¦* ¦ ¦ ¦ ¦G
+-+-+-+-+-+-+-+-+-+-¦
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦* ¦ ¦ ¦H
+-+-+-+-+-+-+-+-+-+-¦
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦* ¦ ¦I
+-+-+-+-+-+-+-+-+-+-¦
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦* ¦J
+-------------------+
(Dans la console, les colonnes sont biens alignées)

//Merci à tous de vous interesser à mon problème,Cordialement,
B@stien
PS: Il me semble que code-source ne supporte pas les unicodes et affiche des "?" à la place (Pour la grille))

4 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
faut pas faire srand(time(null)) à chaque fois, ça sert à initialiser le générateur de nombres aléatoires une fois pour toutes.
(en début de code donc).
Cela dit, je suis pas sûr que ton problème vienne de là.
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
réflexion faite si ce doit être la cause de ton problème; comme tu fais srand(time(null)) avant de tiere x puis avant de tirer y, donc à intervalle très rapproché, ça doit initialiser rand au même point => X=Y à peu près à chaque fois. 
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
12 février 2009
2
Merci beaucoup juju, ca fonctionne avec juste un srand(time(NULL)) au début.
Merci beaucoup

//Cordialement,
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonsoir,

time(NULL) rend l'heure sous forme du nombre de secondes écoulées depuis le 1er janvier 1970 ! Donc plusieurs srand(time(NULL)) fait les uns derrière les autres comme ici (avec de grandes chances de tomber dans la même seconde de temps écoulé) donnent la même "graine" de départ pour le générateur de nombres pseudo-aléatoires et donc les mêmes tirages de nombres pseudo-aléatoires.

Jean-François