匹配字母(Unity3D)

时间:2018-03-21 12:34:58

标签: arrays unity3d char matching

我在团结中写了一个方法,但我认为这是错误的。我想做的是如果某些排序的字母与任何单词匹配,那么它会说真的。

我的意思是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");
                }
            }
        }
    }
}

2 个答案:

答案 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,依此类推。