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