我在团结中写了一个方法,但我认为这是错误的。我想做的是如果某些排序的字母与任何单词匹配,那么它会说真的。
我的意思是10列和20行char数组。该方法将检查字母上下或左右(如拼字游戏)。
e.g。在char数组中有一个单词" H"," U"," N"," D"。这些字母将匹配并且匹配的字母将在游戏中销毁,并且它将在char数组中为null。我在下面编写了这段代码,但是没有用。我哪里错了?
[System.Serializable]
public class ColumnLetters
{
public string[] lettersRows = new string[20];
}
public ColumnLetters[] lettersColumns = new ColumnLetters[10];
public void CheckWord()
{
foreach (string item in answers)
{
for (int i = 0; i < lettersColumns.Length; i++)
{
for (int j = 0; j < lettersColumns[i].lettersRows.Length; j++)
{
if (item == lettersColumns[i].lettersRows[j])
{
Debug.Log("True");
}
else
{
Debug.Log("false");
}
}
}
}
}
答案 0 :(得分:0)
您的算法不完整。让我们说你的游戏矩阵是这样的:
A B C D E
F H U N D
G H I J K
和
item =&#34; HUND&#34;;
执行此操作时:
if(item == lettersColumns [i] .lettersRows [j])
您只是检查游戏矩阵中的单个字母是否等于&#34; HUND&#34;。
所以,在这种情况下:
lettersColumns [0] .lettersRows [0] ==&#34; A&#34;
lettersColumns [2] .lettersRows [1] ==&#34; U&#34;
所以,你在这里做的检查是:
if(&#34; HUND&#34; ==&#34; A&#34;)Debug.Log(&#34; True&#34;);
if(&#34; HUND&#34; ==&#34; B&#34;)Debug.Log(&#34; True&#34;);
...
if(&#34; HUND&#34; ==&#34; H&#34;)Debug.Log(&#34; True&#34;);
if(&#34; HUND&#34; ==&#34; U&#34;)Debug.Log(&#34; True&#34;);
if(&#34; HUND&#34; ==&#34; N&#34;)Debug.Log(&#34; True&#34;);
if(&#34; HUND&#34; ==&#34; D&#34;)Debug.Log(&#34; True&#34;);
...
这些都不是真的。你能做的就是先找到#34; H&#34;在矩阵中。然后看看&#34; H&#34;左边的位置。并检查是否有一封信&#34; U&#34;那里。如果没有字母&#34; U&#34;在那里,试着找到&#34; U&#34; &#34; H&#34;的权利。如果你找到&#34; U&#34;左边的&#34; H&#34;,检查&#34; U&#34;左边的位置对于字母&#34; N&#34;等。对所有四个方向都这样做。然后为下一封信做这一切&#34; H&#34;在矩阵中。
我强烈建议您阅读有关迭代数组和矩阵的更多内容,以帮助您使用此解决方案。用这种方法编写解决方案后,搜索&#34;填字游戏/拼字游戏算法&#34;使用搜索树更快的解决方案。
答案 1 :(得分:0)
你可以做到这一点。
您可以列出董事会可以拥有的所有字词。
然后,在每个字母选择中,检查list.Contains(currentSelection)
示例强>
我选择H,所以我做currentSelection + = H
然后我检查list.Contains(currentSelection)
?如果是这样,销毁
否则
我选择下一个字母U,依此类推。