예제 #1
0
        /// <summary>
        /// vérifie si la réponse est correcte
        /// </summary>
        /// <param name="forme">la forme répondu</param>
        /// <returns>true si la réponse est bonne</returns>
        public bool IsReponseCorrect(Forme forme)
        {
            var retour = forme.Dessin.Equals(_solution.Dessin) && forme.Couleur.Equals(_solution.Couleur);

            if (!retour)
            {
                CompteurErreurs++;
            }
            return(retour);
        }
예제 #2
0
        /// <summary>
        /// Génère un puzzle à afficher
        /// </summary>
        /// <returns>les 2 formes à afficher</returns>
        public List <Forme> GeneratePuzzle()
        {
            var rand        = new Random();
            var choixFacile = false;
            var premPos     = false;

            _puzzleEnCours.Clear();
            //choix de la difficulté (est ce directement un objet à trouver ou faut il aussi réfléchir à sa couleur)
            var choixDifficulte = rand.Next(0, 100);

            if (Difficulte == DifficulteEnum.DIFFICILE)
            {
                choixFacile = choixDifficulte < 10;
                premPos     = choixDifficulte <= 5;
            }

            if (Difficulte == DifficulteEnum.MOYEN)
            {
                choixFacile = choixDifficulte < 30;
                premPos     = choixDifficulte <= 15;
            }

            if (Difficulte == DifficulteEnum.FACILE)
            {
                choixFacile = choixDifficulte < 50;
                premPos     = choixDifficulte <= 25;
            }

            //si on doit deviner directement un des objets présent
            if (choixFacile)
            {
                var choixForme = rand.Next(1, ListeFormeDefaut.Count);

                //choix du bon objet
                _solution = ListeFormeDefaut.FirstOrDefault(x => x.Id == choixForme);

                //Création d'un objet faux
                Forme formeB;
                do
                {
                    var couleur = rand.Next(1, 6);
                    var polygon = rand.Next(1, 6);
                    formeB = new Forme(0, PolygonEnum.GetPoints(polygon), CouleursEnum.GetColor(couleur));
                } while (ListeFormeDefaut.Count(x => x.Couleur.Equals(formeB.Couleur) && x.Dessin.Equals(formeB.Dessin)) > 0 || (formeB.Dessin.Equals(_solution.Dessin) || formeB.Couleur.Equals(_solution.Couleur)));

                if (premPos)
                {
                    _puzzleEnCours.Add(_solution);
                    _puzzleEnCours.Add(formeB);
                }
                else
                {
                    _puzzleEnCours.Add(formeB);
                    _puzzleEnCours.Add(_solution);
                }
            }
            else //pour le choix difficile il faut générer deux objets différents de couleurs différentes et entre eux et entre les objets de base
            {
                //forme 1
                Forme formeA;
                do
                {
                    var couleur = rand.Next(1, 6);
                    var polygon = rand.Next(1, 6);
                    formeA = new Forme(0, PolygonEnum.GetPoints(polygon), CouleursEnum.GetColor(couleur));
                } while (ListeFormeDefaut.Count(x => x.Couleur.Equals(formeA.Couleur) && x.Dessin.Equals(formeA.Dessin)) > 0);

                //forme 2
                Forme formeB;

                var listeTmp          = ListeFormeDefaut.Where(x => !x.Dessin.Equals(formeA.Dessin) && !x.Couleur.Equals(formeA.Couleur));
                var idCouleurRestante = new List <Color>();
                var idFormeRestante   = new List <PointCollection>();
                foreach (var forme in listeTmp)
                {
                    idCouleurRestante.Add(forme.Couleur);
                    idFormeRestante.Add(forme.Dessin);
                }

                do
                {
                    var couleur = idCouleurRestante[rand.Next(0, idCouleurRestante.Count)];
                    var polygon = idFormeRestante[rand.Next(0, idFormeRestante.Count)];
                    formeB = new Forme(0, polygon, couleur);
                } while ((ListeFormeDefaut.Count(x => x.Couleur.Equals(formeB.Couleur) && x.Dessin.Equals(formeB.Dessin)) > 0) || formeB.Dessin.Equals(formeA.Dessin) || formeB.Couleur.Equals(formeA.Couleur));

                _puzzleEnCours.Add(formeA);
                _puzzleEnCours.Add(formeB);
                _solution = ListeFormeDefaut.FirstOrDefault(x => !x.Dessin.Equals(formeB.Dessin) && !x.Dessin.Equals(formeA.Dessin) && !x.Couleur.Equals(formeB.Couleur) && !x.Couleur.Equals(formeA.Couleur));
            }

            ListeIdFormeEnCours.Clear();
            ListeIdFormeEnCours.Add(PolygonEnum.GetValue(_puzzleEnCours[0].Dessin));
            ListeIdFormeEnCours.Add(PolygonEnum.GetValue(_puzzleEnCours[1].Dessin));

            return(_puzzleEnCours);
        }