匹配字母到单词(Unity3D)

Matching letters to word(Unity3D)

我在unity里写了一个方法,但是我觉得不对。我想做的是,如果一些排序的字母与任何单词匹配,那么它会说 true。

我的意思是 10 列和 20 行的字符数组。该方法将从上到下或从左到右检查字母(如拼字游戏)。

例如字符数组 "H"、"U"、"N"、"D" 中有一个单词。这些字母将匹配,匹配的字母将在游戏中销毁,并且在 char 数组中将为空。我在下面写了这段代码但不起作用。我哪里错了?

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

你的算法不完整。假设您的游戏矩阵如下所示:

A B C D E

F H U N D

G H I J K

并且:

item = "HUND";

当你这样做时:

if (item == lettersColumns[i].lettersRows[j])

您只是在检查游戏矩阵中的单个字母是否等于 "HUND"。

因此,在这种情况下:

lettersColumns[0].lettersRows[0] == "A"

lettersColumns[2].lettersRows[1] == "U"

那么,您在这里进行的检查是这样的:

if ("HUND" == "A") Debug.Log("True");

if ("HUND" == "B") Debug.Log("True");

...

if ("HUND" == "H") Debug.Log("True");

if ("HUND" == "U") Debug.Log("True");

if ("HUND" == "N") Debug.Log("True");

if ("HUND" == "D") Debug.Log("True");

...

其中 none 是永远正确的。你可以做的是首先找到字母 "H" 在矩阵中的位置。再看"H"左边的位置,看有没有字母"U"。如果那里没有字母 "U",请尝试在 "H" 的右侧找到 "U"。如果您确实在 "H" 左侧找到 "U",请检查 "U" 左侧的位置是否有字母 "N" 等。对所有四个方向执行此操作。然后对矩阵中的下一个字母 "H" 执行所有这些操作。

我强烈建议阅读更多关于遍历数组和矩阵的内容,以帮助您解决这个问题。使用此方法编写解决方案后,搜索 "crossword/scrabble algorithms" 以使用搜索树获得更快的解决方案。

你可以做的很简单。

  • 你可以有一个板子可以有的所有单词的列表。

  • 然后,在每个字母 selection 中检查 list.Contains(currentSelection)

例子

我select H,所以我做currentSelection += H

然后我检查list.Contains(currentSelection)?如果是,销毁

其他

I select 下一个字母 U,依此类推。