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))
A voir également:
Nombre aléatoire numéro de téléphone
Numero de telephone aleatoire - Meilleures réponses
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à.
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.
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.