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