Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
 //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;
 }