/// <summary> /// Test de la classe DeAJouer /// </summary> static void TestDeAJouer() { AfficherTitre("Test de la classe DeAJouer"); int nbErreurs = 0; DeAJouer de = new DeAJouer(); DeAJouer autreDe = new DeAJouer(); // Validation de l'état initial if (de.EstJouable || autreDe.EstJouable) { IndiquerErreur("Un dé non lancé ne doit pas être jouable", ref nbErreurs); } // Compteur pour chaque valeur possible (L'index 0 n'est jamais utilisé) int[] compteurs = new int[7]; // Effectue un grand nombre d'itérations pour valider l'aspect aléatoire const int NbIterations = 1000000; for (int i = 0; i < NbIterations; ++i) { // Lancer un dé lui assigne aléatoirement une valeur entre 1 et 6 de.Lancer(); if (de.Valeur < 1 || de.Valeur > 6) { IndiquerErreur("La valeur d'un dé doit être entre 1 et 6", ref nbErreurs); break; } else { // On compte le nombre d'occurences de chaque valeur compteurs[de.Valeur]++; } // Lancer un dé le rend jouable if (!de.EstJouable) { IndiquerErreur("Un dé nouvellement lancé doit être jouable", ref nbErreurs); break; } // Après la duplication, autreDe doit avoir la même valeur et le même statut que le dé d'origine autreDe.Dupliquer(de); if (de.Valeur != autreDe.Valeur || de.EstJouable != autreDe.EstJouable) { Console.WriteLine("Valeur de DE: {0}", de.Valeur); Console.WriteLine("Valeur de autreDE: {0}", autreDe.Valeur); Console.WriteLine("Statut de DE: {0}", de.EstJouable); Console.WriteLine("Statut de autreDE: {0}", autreDe.EstJouable); IndiquerErreur("La duplication des dés ne fonctionne pas", ref nbErreurs); break; } // Un dé ne se joue qu'une seule fois de.Jouer(); autreDe.Jouer(); if (de.EstJouable || autreDe.EstJouable) { IndiquerErreur("Un dé joué ne doit plus être jouable tant qu'il n'est pas relancé", ref nbErreurs); break; } } // Validation de la distribution aléatoire des valeurs if (nbErreurs == 0) { int probabilite = NbIterations / 6; for (int i = 1; i < compteurs.Length; ++i) { double diff = (double)(compteurs[i] - probabilite) / (double)probabilite; if (diff > 0.02 || diff < -0.02) { IndiquerErreur("La distribution ne semble pas aléatoire.\n" + "Relancez le test.\n" + "Si le problème persiste, revoyez la génération des valeurs des dés.", ref nbErreurs); break; } } } Pause(nbErreurs == 0 ? "OK" : ""); }
public void Dupliquer(DeAJouer deADupliquer) { _jouable = deADupliquer._jouable; _valeurDe = deADupliquer._valeurDe; }