예제 #1
0
        public Syllable findBasedOnSyllable(Syllable prev, System.Random rnd, bool isFinal, int fix)
        {
            Syllable.Types[] afterV = new Syllable.Types[] { Syllable.Types.C, Syllable.Types.CC, Syllable.Types.CV };

            if (isFinal)
            {
                // Do not allow for ending in consonant clusters
                afterV = new Syllable.Types[] { Syllable.Types.C, Syllable.Types.CV, Syllable.Types.VC };
            }

//            Debug.Log("prev: " + prev.type);
            if (prev == null)
            {
                return(null);
            }
            if (prev.type == Syllable.Types.C)
            {
                return(findRandomTypes(new Syllable.Types[] { Syllable.Types.VC, Syllable.Types.V, Syllable.Types.CV }, rnd, fix));
            }
            if (prev.type == Syllable.Types.V || prev.type == Syllable.Types.CV)
            {
                return(findRandomTypes(afterV, rnd, fix));
            }
            if (prev.type == Syllable.Types.CC)
            {
                return(findRandomType(Syllable.Types.V, rnd, fix));
            }
            if (prev.type == Syllable.Types.VC)
            {
                return(findRandomType(Syllable.Types.V, rnd, fix));
            }

            return(null);
        }
예제 #2
0
 public void setSyllableString(List <Syllable> orglst, string str, int fix, Syllable.Types t)
 {
     // first delete all originals
     foreach (Syllable syll in orglst)
     {
         syllables.Remove(syll);
     }
     string[] lst = str.Split(',');
     foreach (string s in lst)
     {
         if (s.Trim() != "")
         {
             Syllable syll = new Syllable(s.Trim(), fix, t);
             syllables.Add(syll);
         }
     }
 }
예제 #3
0
        public string GenerateWord(System.Random r)
        {
            int             noSyllables = r.Next() % (maxSyllables - minSyllables) + minSyllables;
            List <Syllable> syll        = new List <Syllable>();
            Syllable        s           = findRandom(r, Syllable.Prefix);

            syll.Add(s);
            for (int i = 0; i < noSyllables - 1; i++)
            {
                int fix = Syllable.Infix;
                if (i == noSyllables - 2)
                {
                    fix = Syllable.Postfix;
                }

                s = findBasedOnSyllable(s, r, i == noSyllables - 2, fix);
                if (fix == Syllable.Postfix)
                {
                    //                    if (s!=null)
//                        Debug.Log(s.syllable + " : " + fix);
//                      else
                    //                  Debug.Log("COULD NOT FIND POSTFIX");
                }
                if (s != null)
                {
                    syll.Add(s);
                }
            }

            string word      = "";
            int    remaining = maxDoubleC;

            for (int i = 0; i < syll.Count; i++)
            {
                Syllable sb = syll[i];
                if (sb == null)
                {
                    continue;
                }

                if (i > 0 && remaining > 0)
                {
                    Syllable prev = syll[i - 1];
                    if (prev.type == Syllable.Types.CV || prev.type == Syllable.Types.V)
                    {
                        if (r.NextDouble() > 0.6)
                        {
                            //bool ok=true;
                            // Double consonant
                            //if (!(i==syll.Count-1 && exceptDoubleEndings.Contains(sb.syllable[0].ToString())))
//                            Debug.Log("DOUBLE:" + sb.syllable[0]);
                            //if (i==syll.Count-1 && !allowDoubleCEnd)
                            //  ok = false;

                            if (!exceptDoubles.Contains(sb.syllable[0].ToString()))
                            {
                                word += sb.syllable[0];
                                remaining--;
                            }
                        }
                    }
                }
                word += sb.syllable;
            }
//            return word;
            return(RemoveIllegalDoubles(word));
        }