/// <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); }
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); } }