Пример #1
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);
        }
Пример #2
0
        public static PolygonEnum GeneratePolygon(int choix, double maxSize)
        {
            switch (choix)
            {//Size = 'p.Size' threw an exception of type 'System.InvalidOperationException'
            //Native View = To inspect the native object, enable native code debugging.
            case 1:
                Point           a = new Point(0, 0);
                Point           b = new Point(0, maxSize);
                Point           c = new Point(maxSize, maxSize);
                Point           d = new Point(maxSize, 0);
                PointCollection p = new PointCollection();
                p.Add(a);
                p.Add(b);
                p.Add(c);
                p.Add(d);
                PolygonEnum l = new PolygonEnum(1, p);
                return(new PolygonEnum(1,
                                       new PointCollection
                {
                    new Point(0, 0),
                    new Point(0, maxSize),
                    new Point(maxSize, maxSize),
                    new Point(maxSize, 0)
                }));

            case 2:
                return(new PolygonEnum(2,
                                       new PointCollection
                {
                    new Point(maxSize / 2, 0),
                    new Point(maxSize, maxSize),
                    new Point(0, maxSize)
                }));

            case 3:
                return(new PolygonEnum(3,
                                       new PointCollection
                {
                    new Point(maxSize / 2, 0),
                    new Point(maxSize, maxSize / 2),
                    new Point(maxSize, maxSize),
                    new Point(0, maxSize),
                    new Point(0, maxSize / 2)
                }));

            case 4:
                return(new PolygonEnum(4,
                                       new PointCollection
                {
                    new Point(maxSize / 2, 0),
                    new Point(maxSize, maxSize / 2.66667),
                    new Point(maxSize / 1.25, maxSize),
                    new Point(maxSize / 5, maxSize),
                    new Point(0, maxSize / 2.66667)
                }));

            case 5:
                return(new PolygonEnum(5,
                                       new PointCollection
                {
                    new Point(maxSize / 2, 0),
                    new Point(maxSize - (maxSize / 4), maxSize / 2),
                    new Point(maxSize / 2, maxSize),
                    new Point(maxSize / 4, maxSize / 2)
                }));

            default:
                return(null);
            }
        }