Beispiel #1
0
        public static int iTirageMotExistantAutre(
            List <string> lstNiv, List <string> lstFreq, int iNumMotExistant,
            clsInitTirage itPrefixe, clsInitTirage itSuffixe,
            List <int> lstNumMotExistant, ref clsMotExistant motAutre)
        {
            // Tirer au hasard un autre mot du niveau demandé
            var enreg = from mot0 in m_dicoMotsExistants.ToList()
                        where
                        lstNiv.Contains(mot0.Value.sNivPrefixe) &&
                        lstNiv.Contains(mot0.Value.sNivSuffixe) &&
                        lstFreq.Contains(mot0.Value.sFreqPrefixe) &&
                        lstFreq.Contains(mot0.Value.sFreqSuffixe) &&
                        !lstNumMotExistant.Contains(iNumMotExistant) &&
                        !itPrefixe.lstSegmentsDejaTires.Contains(mot0.Value.sPrefixe) &&
                        !itSuffixe.lstSegmentsDejaTires.Contains(mot0.Value.sSuffixe) &&
                        !itPrefixe.lstSensSegmentDejaTires.Contains(mot0.Value.sDefPrefixe) &&
                        !itSuffixe.lstSensSegmentDejaTires.Contains(mot0.Value.sDefSuffixe) &&
                        !itPrefixe.lstUnicitesSegmentDejaTires.Contains(mot0.Value.sUnicitePrefixeSynth) &&
                        !itSuffixe.lstUnicitesSegmentDejaTires.Contains(mot0.Value.sUniciteSuffixeSynth)
                        select mot0;

            int iNbEnreg = enreg.Count();

            if (iNbEnreg == 0)
            {
                //if (clsConst.bDebug) Debugger.Break();
                m_msgDelegue.AfficherMsg(
                    "Aucun mot ne correspond à la sélection : Tirage impossible !");
                return(clsConst.iTirageImpossible);
            }

            int iNbMotsExistantsFiltres = iNbEnreg;
            // On tire un nombre compris entre 0 et iNbSegmentsFilres - 1 (liste filtrée)
            int iNumMotExistantTire = clsUtil.iRandomiser(0, iNbMotsExistantsFiltres - 1);

            motAutre = enreg.ElementAtOrDefault(iNumMotExistantTire).Value;
            // Indice du mot dans la liste complète
            int iNumMotExistantAutre = motAutre.iNumMotExistant;

            lstNumMotExistant.Add(iNumMotExistantAutre);
            itPrefixe.lstSegmentsDejaTires.Add(motAutre.sPrefixe);
            itSuffixe.lstSegmentsDejaTires.Add(motAutre.sSuffixe);
            itPrefixe.lstSensSegmentDejaTires.Add(motAutre.sDefPrefixe);
            itSuffixe.lstSensSegmentDejaTires.Add(motAutre.sDefSuffixe);
            itPrefixe.lstUnicitesSegmentDejaTires.Add(motAutre.sUnicitePrefixeSynth);
            itSuffixe.lstUnicitesSegmentDejaTires.Add(motAutre.sUniciteSuffixeSynth);

            if (clsConst.bDebug && string.IsNullOrEmpty(motAutre.sUnicitePrefixeSynth))
            {
                Debugger.Break();
            }
            if (clsConst.bDebug && string.IsNullOrEmpty(motAutre.sUniciteSuffixeSynth))
            {
                Debugger.Break();
            }

            return(iNumMotExistant);
        }
Beispiel #2
0
        public int iTirageSegment(bool bComplet,
                                  List <string> lstNiv, List <string> lstFreq,
                                  clsInitTirage it, bool bGrecoLatin, bool bNeoRigolo)
        {
            // bComplet : tous les segments (y compris ceux du dictionnaire),
            //  ou sinon seulement ceux du Logotron
            // lstNiveaux : combinaison des niveaux "1", "2" et/ou "3"
            // lstNumSegmentDejaTires  : ne pas tirer à nouveau un segment déjà tiré
            //  (pour avoir un mot avec plusieurs préfixes distincts)
            // lstSegmentDejaTires     : ne pas tirer à nouveau un segment déjà tiré
            //  (cette fois le segment doit être unique, dans le cas où des segments
            //   seraient présents avec plusieurs sens)
            // lstSensSegmentDejaTires : ne pas tirer à nouveau un sens déjà tiré
            // lstUnicitesSegmentDejaTires : lié au champ unicité
            //  (unicité explicite car le sens peut varier plus ou moins)
            // bGrecoLatin : seulement les segments d'origine greco-latine,
            //  sinon les segments de toutes origines
            // bNeoRigolo : inclure les néologismes amusants

            // Il faut vérifier que le tirage est possible : compter qu'il y a
            //  au moins 1 candidat, sinon boucle infinie dans le tirage

            // 01/05/2019 Test élision :
            // (( m_bPrefixe && seg0.sSegment.EndsWith(clsConst.sCarO)  ) ||
            //  (!m_bPrefixe && seg0.sSegment.StartsWith(clsConst.sCarO))) &&

            var lst   = ObtenirSegmentBases();
            var enreg =
                from seg0 in lst
                where
                lstNiv.Contains(seg0.sNiveau) &&
                lstFreq.Contains(seg0.sFrequence) &&
                ((it.lstNumSegmentDejaTires == null) ||
                 !it.lstNumSegmentDejaTires.Contains(seg0.iNumSegment)) &&
                ((it.lstSegmentsDejaTires == null) ||
                 !it.lstSegmentsDejaTires.Contains(seg0.sSegment)) &&
                ((it.lstSensSegmentDejaTires == null) ||
                 !it.lstSensSegmentDejaTires.Contains(seg0.sSens)) &&
                ((it.lstUnicitesSegmentDejaTires == null) ||
                 !it.lstUnicitesSegmentDejaTires.Contains(seg0.sUnicite)) &&
                (bComplet || seg0.sLogotron == clsConst.sSelectLogotron) &&
                ((!bGrecoLatin &&
                  (bNeoRigolo ||
                   seg0.sOrigine != LogotronLib.enumOrigine.sNeologismeAmusant)) ||
                 (bGrecoLatin &&
                  (seg0.sOrigine == LogotronLib.enumOrigine.sGrec ||
                   seg0.sOrigine == LogotronLib.enumOrigine.sLatin ||
                   seg0.sOrigine == LogotronLib.enumOrigine.sGrecoLatin)))
                select seg0;

            int iNbEnreg = enreg.Count();

            if (iNbEnreg == 0)
            {
                if (clsConst.bDebug)
                {
                    Debugger.Break();
                }
                MsgDelegue.AfficherMsg(
                    "Aucun élément ne correspond à la sélection : Tirage impossible !");
                return(clsConst.iTirageImpossible);
            }

            int iNbSegmentsFilres = iNbEnreg;
            // On tire un nombre compris entre 0 et iNbSegmentsFilres - 1 (liste filtrée)
            int iNumSegment2 = clsUtil.iRandomiser(0, iNbSegmentsFilres - 1);
            var seg          = enreg.ElementAtOrDefault(iNumSegment2);
            int iNumSegment  = seg.iNumSegment; // Retourner l'indice du segment dans la liste complète

            if (it.lstNumSegmentDejaTires != null)
            {
                it.lstNumSegmentDejaTires.Add(iNumSegment);
            }
            if (it.lstSegmentsDejaTires != null)
            {
                it.lstSegmentsDejaTires.Add(seg.sSegment);
            }
            if (it.lstSensSegmentDejaTires != null)
            {
                it.lstSensSegmentDejaTires.Add(seg.sSens);
            }
            if (seg.sUnicite.Length > 0 &&
                it.lstUnicitesSegmentDejaTires != null)
            {
                it.lstUnicitesSegmentDejaTires.Add(seg.sUnicite);
            }

            return(iNumSegment);
        }
Beispiel #3
0
        public static bool bTirage(bool bComplet, string sNbPrefixesSuccessifs,
                                   List <string> lstNiv, List <string> lstFreq,
                                   ref string sMot, ref string sExplication,
                                   ref string sDetail, ref List <string> lstEtymFin,
                                   bool bGrecoLatin, bool bNeoRigolo, clsMsgDelegue msgDelegue)
        {
            List <string> lstEtym            = new List <string>();
            int           iNbTiragesPrefixes = 0;

            if (sNbPrefixesSuccessifs == clsConst.sHasard)
            {
                iNbTiragesPrefixes = clsUtil.iRandomiser(1, 5);
                float rProba = 1f;
                switch (iNbTiragesPrefixes)
                {
                case 1:
                    rProba = 1f;     // Toujours accepté
                    break;

                case 2:
                    rProba = 1 / 2f;   // Une fois sur 2
                    //rProba = 0.1f; // Une fois sur 10
                    break;

                case 3:
                    rProba = 1 / 4f;   // Une fois sur 4
                    //rProba = 1/3f; // Une fois sur 3
                    //rProba = 0.05f;
                    break;

                case 4:
                    rProba = 1 / 8f;   // Une fois sur 8
                    //rProba = 1/4f; // Une fois sur 4
                    //rProba = 0.03f;
                    break;

                case 5:
                    rProba = 1 / 16f;   // Une fois sur 16
                    //rProba = 1/5f; // Une fois sur 5
                    //rProba = 0.01f;
                    break;
                }
                if (rProba < 1f)
                {
                    float rTirage = clsUtil.rRandomiser();
                    if (rTirage > rProba)
                    {
                        iNbTiragesPrefixes = 1;
                    }
                }
            }
            else
            {
                iNbTiragesPrefixes = int.Parse(sNbPrefixesSuccessifs);
            }

            string        sPrefixesMaj       = "";
            string        sSensPrefixesMaj   = "";
            string        sDetailPrefixesMaj = "";
            clsInitTirage itPref             = new clsInitTirage();

            clsGestBase.m_prefixes.MsgDelegue = msgDelegue;
            clsGestBase.m_suffixes.MsgDelegue = msgDelegue;
            for (int i = 0; i <= iNbTiragesPrefixes - 1; i++)
            {
                //if (LogotronLib.clsConst.bDebug)
                //    Console.WriteLine("Tirage préfixe n°" + (i + 1));
                int iNumPrefixe = clsGestBase.m_prefixes.iTirageSegment(bComplet,
                                                                        lstNiv, lstFreq, itPref, bGrecoLatin, bNeoRigolo);
                clsSegmentBase prefixe = null;
                if (!clsGestBase.m_prefixes.bLireSegment(iNumPrefixe, ref prefixe))
                {
                    return(false);
                }
                string sNiveauP         = prefixe.sNiveau;
                string sPrefixe         = prefixe.sSegment;
                string sPrefixeMaj      = sPrefixe.ToUpper();
                string sSensPrefixeMaj2 = prefixe.sSens.ToUpper();
                sSensPrefixeMaj2   = clsBase.sCompleterPrefixe(sSensPrefixeMaj2);
                sPrefixesMaj      += sPrefixeMaj;
                sSensPrefixesMaj   = sSensPrefixesMaj + " " + sSensPrefixeMaj2;
                sDetailPrefixesMaj = sDetailPrefixesMaj + sPrefixeMaj + "(" + sNiveauP + ") - ";
                string sEtymPrefixe = prefixe.sEtym;
                if (sEtymPrefixe.Length > 0)
                {
                    lstEtym.Add(sPrefixe + "- : " + sEtymPrefixe);
                }
            }
            //if (LogotronLib.clsConst.bDebug) Console.WriteLine("Tirage suffixe");
            int iNumSuffixe = clsGestBase.m_suffixes.iTirageSegment(bComplet,
                                                                    lstNiv, lstFreq, new clsInitTirage(), bGrecoLatin, bNeoRigolo);
            clsSegmentBase suffixe = null;

            if (!clsGestBase.m_suffixes.bLireSegment(iNumSuffixe, ref suffixe))
            {
                return(false);
            }
            string sNiveauS          = suffixe.sNiveau;
            string sSuffixe          = suffixe.sSegment;
            string sSuffixeMaj       = sSuffixe.ToUpper();
            string sDetailSuffixeMaj = sSuffixeMaj + "(" + sNiveauS + ")";
            string sSensSuffixeMaj   = suffixe.sSens.ToUpper();

            sMot         = sPrefixesMaj + sSuffixeMaj;
            sExplication = sSensSuffixeMaj + sSensPrefixesMaj;
            sDetail      = sDetailPrefixesMaj + sDetailSuffixeMaj;
            string sEtymSuffixe = suffixe.sEtym;

            if (sEtymSuffixe.Length > 0)
            {
                lstEtym.Add("-" + sSuffixe + " : " + sEtymSuffixe);
            }
            lstEtymFin = lstEtym;

            //msgDelegue.AfficherMsg("Test MsgBox");

            return(true);
        }