예제 #1
0
        /// <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" : "");
        }
예제 #2
0
 public void Dupliquer(DeAJouer deADupliquer)
 {
     _jouable  = deADupliquer._jouable;
     _valeurDe = deADupliquer._valeurDe;
 }