在c#unity中随机生成的字符中找到有效的单词

时间:2018-03-22 07:17:44

标签: c# unity3d

我在运行时生成了随机字符,生成后我需要知道用列出的字符组成的有效字数。这不是矩阵形式,它将显示在一行中。

这是用于生成随机字符的代码:

  public void  GenerateLettersAtStart()
 {
 for (int i = 0; i <= 6; i++)
 {
    wordRan.wordsStore.Clear();
    a = UnityEngine.Random.Range(0,consonants.Length);
    availablesetConsonants [i].GetComponent<TextMesh> ().text  = 
   consonants[a].ToString();
   }
   for (int j = 0; j <= 2; j++)
    {
    wordRan.wordsStore.Clear();
    b = UnityEngine.Random.Range(0, vowels.Length);
    availablesetVowels [j].GetComponent<TextMesh> ().text = 
   vowels[b].ToString();
    }
   }

它的字面意思是排列,但这个词应该是有意义的。我有文本文件来比较我通过文本资产加载..这是一个单词加扰器游戏实际上我需要显示从列出的随机字母解读有效单词的数量 -

void Awake() { string[] w = wordAsset.text.Split(new char[] { '\n', '\r' 
    }, System.StringSplitOptions.RemoveEmptyEntries); allWords = new 
    HashSet(w);

    }
  public void Start()
   {
  //RepeatedWordsCheck ();    
   }
    public void Update()
   {

    }

  public bool CheckWord(string wrd)
  {
  return allWords.Contains(wrd.ToLower());

   }
  public void ClickFun() 
   {
  Debug.Log ("acx");
  bool Check = CheckWord (GameController.currentWord);
  if (Check == true  )
  {
  Debug.Log("correct word");
  }
     }

2 个答案:

答案 0 :(得分:0)

按字母顺序对每个真实单词中的字母重新排序,例如。单词“cat”将变为“act”。拥有这样的字典,您可以按相同的顺序对随机生成的字符进行排序,然后您可以通过==运算符匹配字符串。

答案 1 :(得分:0)

这个问题有很多解决方案。问题(正如您可能猜到的)是基本的暴力解决方案可能非常缓慢(检查许多组合)。

我将如何做到这一点:

列出对:

var listOfPairs = new List<KeyValuePair>();

每个单词都保存为一对,如下所示:

  

{{word,word},{fork,fork},{other,other},...}

现在为每一对,将它与所有随机字母进行比较。因此,如果你在字典中有N个单词和10个随机字母,这将在最大10 * N操作中完成(复杂度O(N),这是相当不错的)

每次将单词与字母进行比较时,请从对中的第一个元素中删除该字母:让我们举个例子:您测试单词word

  

{word,word}

如果第一个随机字母为o,则最终为

  

{wrd,word}

如果第二个随机字母为a,则最终为

  

{wrd,word}

如果第二个随机字母为d,则最终为

  

{wr,word}

等等。对于你词典中的所有单词都可以。

最后,列表中第一个元素为空字符串的所有对都可以用随机字母书写。

您可以使用for循环检查空键或使用Linq:

来检索此项
var listOfPairs = new List<KeyValuePair>();

// Do the algorithm described above

// Retrieve words that can be written with the random letters
possibleWords = listOfPairs.Where(pair => pair.key == "").Select(pair => pair.value)

顺便说一句,您可以在代码中选择随机数量的元音,以改变可能性:

public void  GenerateLettersAtStart()
{
    int nbVowels = (int)Random.Range(2, 5);
    int nbConsonants = 10-nbVowels;
    for (int i = 0; i < nbConsonants; i++)
    {
        wordRan.wordsStore.Clear();
        a = UnityEngine.Random.Range(0,consonants.Length);
        availablesetConsonants [i].GetComponent<TextMesh> ().text  = 
        consonants[a].ToString();
    }

    for (int j = 0; j < nbVowels; j++)
    {
        wordRan.wordsStore.Clear();
        b = UnityEngine.Random.Range(0, vowels.Length);
        availablesetVowels [j].GetComponent<TextMesh> ().text = 
       vowels[b].ToString();
    }
}