Anonyme
-
Modifié le 30 mai 2020 à 20:38
Whismeril
Messages postés18624Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 septembre 2023
-
30 mai 2020 à 21:29
Bonjour,
Premièrement le code :
using System;
namespace test
{
class Program
{
static void Main(string[] args)
{
Personnage perso1 = new Personnage();
//System.Threading.Thread.Sleep(1000);
Personnage perso2 = new Personnage();
while (true)
{
Console.WriteLine("Perso1 :");
perso1.LanceurDe();
Console.WriteLine("Perso2 :");
perso2.LanceurDe();
System.Threading.Thread.Sleep(1000);
}
}
}
}
using System;
namespace test
{
public class Personnage
{
private De De;
public Personnage()
{
De = new De();
}
public void LanceurDe()
{
Console.WriteLine(De.LancerDe());
}
}
}
using System;
namespace test
{
public class De
{
private Random random;
public De()
{
random = new Random();
}
public int LancerDe()
{
return random.Next(0, 100);
}
}
}
Deuxièmement, la logique voudrait que si on ne met pas en commentaire le :
//System.Threading.Thread.Sleep(1000);
.
Le programme devrait avoir le même comportement, mais quand je laisse commenté les deux personnage à chaque tour, on le même tirage de dé. Alors que si la ligne n'est pas commenté le tirage est différent entre les deux personnages (fonctionnement voulu). Je dois bien avouer que je ne comprend pas du tout la raison de cette différence Si quelqu'un aurait une réponse je serai ravi de l'entendre.
Bien à vous
P.S : Ce n'est pas un programme complet, c'est juste pour mettre en lumière le problème. Et désolé pour les fautes de français éventuelles.
Whismeril
Messages postés18624Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 septembre 2023629 30 mai 2020 à 20:47
Bonjour
il faut savoir qu'un random, ça n'est pas aléatoire, c'est une loi mathématique.
Ce qui fait qu'elle semble aléatoire c'est qu'elle a besoin d'une valeur d'initialisation dont dépendent les résultats suivants.
Quand tu ne lui donne pas de valeur, elle prend l'heure (ou la date et l'heure) à la seconde.
Donc si tu initialises par défaut 2 randoms dans la même secondes, ils retournent la même chose.
Option 1, tu n'initialises qu'un seul dé, que tu passes en paramètre à tes personnages.
Option 2 tu initialises les dés avec un valeur différentes (le tick de datetime.Now par exemple)
30 mai 2020 à 20:59
qu'ils récupéraient l'heure. Du coup c'est plus clair. Je trouve ton option 1 plus intéressante. Merci beaucoup.