/// <summary> /// Genere une liste d'objet 'chiffre' à afficher /// </summary> /// <param name="maxWidth">Taille en hauteur</param> /// <param name="maxHeight">taille en largeur</param> /// <returns>la liste des chiffres</returns> public IEnumerable <Chiffre> GenererListeChiffre(int maxWidth, int maxHeight) { _listeChiffre = new List <Chiffre>(); int nbChiffreMaxGenerer; //pour définir le nombre de chiffre à générer if (Difficulte.Equals(DifficulteEnum.FACILE)) { if (_nombreToursFait <= 4) { nbChiffreMaxGenerer = 6; } else if (_nombreToursFait <= 10) { nbChiffreMaxGenerer = 10; } else { nbChiffreMaxGenerer = 13; } } else if (Difficulte.Equals(DifficulteEnum.MOYEN)) { if (_nombreToursFait <= 4) { nbChiffreMaxGenerer = 8; } else if (_nombreToursFait <= 10) { nbChiffreMaxGenerer = 14; } else { nbChiffreMaxGenerer = 18; } } else { if (_nombreToursFait <= 4) { nbChiffreMaxGenerer = 12; } else if (_nombreToursFait <= 8) { nbChiffreMaxGenerer = 18; } else { nbChiffreMaxGenerer = 23; } } int maxChoix = 0; //génération des chiffres for (var i = 0; i < nbChiffreMaxGenerer; i++) { var chiffre = _random.Next(2, 7); var color = new Color(); switch (_random.Next(0, 3)) { case 0: //noir color = Color.FromArgb(255, 0, 0, 0); break; case 1: //bleu color = Color.FromArgb(255, 0, 0, 180); break; case 2: //rouge color = Color.FromArgb(255, 255, 0, 0); break; } //animation si on est à plus de la moitié var animation = MouvementEnum.Aucun; if (i >= _nombreTours / 2) { var aleatoireAnim = _random.Next(0, 9); switch (aleatoireAnim) { case 8: animation = MouvementEnum.Agrandisssement; break; case 7: animation = MouvementEnum.Agrandisssement; break; case 6: animation = MouvementEnum.Rotation; break; case 5: animation = MouvementEnum.TranslationVerticale; break; case 4: animation = MouvementEnum.TranslationHorizontale; break; case 3: animation = MouvementEnum.Rotation; break; } } var chiffreTmp = new Chiffre(i, chiffre, color, animation); var testEmplacement = false; var marginTopTmp = 0; var marginLeftTmp = 0; do { marginTopTmp = _random.Next(10, (animation.Equals(MouvementEnum.TranslationHorizontale) || animation.Equals(MouvementEnum.TranslationVerticale)) ? maxHeight - 115 : maxHeight - 10); marginLeftTmp = _random.Next(10, (animation.Equals(MouvementEnum.TranslationHorizontale) || animation.Equals(MouvementEnum.TranslationVerticale)) ? maxWidth - 115 : maxWidth - 10); if (_listeChiffre.Any(c => (c.MarginLeft - 40 > marginLeftTmp && c.MarginLeft + 40 < marginLeftTmp) && (c.MarginTop - 40 > marginTopTmp && c.MarginTop + 40 < marginTopTmp))) { testEmplacement = true; } } while (testEmplacement); chiffreTmp.MarginTop = marginTopTmp; chiffreTmp.MarginLeft = marginLeftTmp; _listeChiffre.Add(chiffreTmp); maxChoix = (i <= (_nombreTours / 2)) ? 3 : 4; if (maxChoix == 4 && _listeChiffre.All(x => x.Mouvement == MouvementEnum.Aucun)) { maxChoix = 3; } } //génération de la question var typeQuestion = TypeQuestionEnum.TypeChiffre; switch (_random.Next(1, maxChoix)) { case 1: typeQuestion = TypeQuestionEnum.TypeChiffre; break; case 2: typeQuestion = TypeQuestionEnum.TypeCouleur; break; case 3: typeQuestion = TypeQuestionEnum.TypeMouvement; break; } Question = ResourceLoader.GetForCurrentView().GetString("combien") + " "; if (typeQuestion.Equals(TypeQuestionEnum.TypeChiffre)) { Question += ResourceLoader.GetForCurrentView().GetString("de") + " "; var liste = _listeChiffre.Select(x => x.Nombre).Distinct().ToList(); var empAl = _random.Next(0, liste.Count()); Question += liste[empAl].ToString(); _resultat = _listeChiffre.Count(x => x.Nombre == liste[empAl]); } else if (typeQuestion.Equals(TypeQuestionEnum.TypeCouleur)) { Question += ResourceLoader.GetForCurrentView().GetString("de") + " "; var liste = _listeChiffre.Select(x => x.Couleur).Distinct().ToList(); var empAl = _random.Next(0, liste.Count()); var col = liste[empAl]; _resultat = _listeChiffre.Count(x => x.Couleur.Equals(col)); if (col.Equals(Color.FromArgb(255, 0, 0, 0))) { Question += ResourceLoader.GetForCurrentView().GetString("Noir"); } else if (col.Equals(Color.FromArgb(255, 0, 0, 180))) { Question += ResourceLoader.GetForCurrentView().GetString("Bleu"); } else { Question += ResourceLoader.GetForCurrentView().GetString("Rouge"); } } else if (typeQuestion.Equals(TypeQuestionEnum.TypeMouvement)) { var liste = _listeChiffre.Where(x => x.Mouvement != MouvementEnum.Aucun).Select(x => x.Mouvement).Distinct().ToList(); var empAl = _random.Next(0, liste.Count()); switch (liste[empAl]) { case MouvementEnum.Rotation: Question += ResourceLoader.GetForCurrentView().GetString("Tournent"); _resultat = _listeChiffre.Count(x => x.Mouvement == MouvementEnum.Rotation); break; case MouvementEnum.Agrandisssement: Question += ResourceLoader.GetForCurrentView().GetString("ChangeTaille"); _resultat = _listeChiffre.Count(x => x.Mouvement == MouvementEnum.Agrandisssement); break; case MouvementEnum.TranslationVerticale: Question += ResourceLoader.GetForCurrentView().GetString("Bougent"); _resultat = _listeChiffre.Count(x => x.Mouvement == MouvementEnum.TranslationHorizontale || x.Mouvement == MouvementEnum.TranslationVerticale); break; case MouvementEnum.TranslationHorizontale: Question += ResourceLoader.GetForCurrentView().GetString("Bougent"); _resultat = _listeChiffre.Count(x => x.Mouvement == MouvementEnum.TranslationHorizontale || x.Mouvement == MouvementEnum.TranslationVerticale); break; } } Question += " ?"; return(_listeChiffre); }
//Fixe un chiffre comme étant visible (non modifiable) public void SetCaseVisible(int i, int j, Chiffre c) { this.GetJeu().SetChiffreVisible(i, j, c); ((TextBox)tableLayoutPanel1.GetControlFromPosition(j, i)).ReadOnly = true; }