【问题标题】:Matching letters to word(Unity3D)匹配字母到单词(Unity3D)
【发布时间】:2018-08-30 13:59:33
【问题描述】:

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

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

例如char 数组 "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");
                }
            }
        }
    }
}

【问题讨论】:

    标签: arrays unity3d char matching


    【解决方案1】:

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

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

    ...

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

    我强烈建议您阅读更多有关迭代数组和矩阵的信息,以帮助您解决此问题。使用这种方法编写解决方案后,使用搜索树搜索“填字游戏/拼字游戏算法”以获得更快的解决方案。

    【讨论】:

    • 我写了这个,但它的写法相反,我的意思是从上到下 for (int i = 0; i
    【解决方案2】:

    你可以做的很简单。

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

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

    示例

    我选择了 H,所以我做 currentSelection += H

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

    其他

    我选择下一个字母 U,依此类推。

    【讨论】:

    • 我的游戏是俄罗斯方块的文字游戏。 tetrominos 有字母,它们会水平或垂直向下。确保任何字母都包含一个单词,那么它就会得分。我为它做了行和列。将 tetrominos 写入行或列数组,但我无法进行间距。我写了 contains 和 null 但失败了。
    猜你喜欢
    • 2015-08-22
    • 2013-08-25
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多