0
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Security.Cryptography.X509Certificates;
using UnityEngine;
using UnityEngine.UI;

public class LetterRandomiser : MonoBehaviour
{
    public char[] characters; 

    public Text textbox; 

    public InputField mainInputField;

    public string[] lines;

    void Start() 
    {
        char c = characters[Random.Range(0, characters.Length)];
        char d = characters[Random.Range(0, characters.Length)];

        textbox.text = c.ToString() + d.ToString(); 

        lines = System.IO.File.ReadAllLines(@"C:\Users\lluc\Downloads\corncob_lowercase.txt");
    }

    void wordIsInFile(string word)
    {
        foreach (var item in lines)
        {
            if (word == item)
            {
                char c = characters[Random.Range(0, characters.Length)];
                char d = characters[Random.Range(0, characters.Length)];
                textbox.text = c.ToString() + d.ToString();
                mainInputField.text = "";
            }
            else
            {
                mainInputField.text = "";
            }
        }
    }

    void Update()
    { 
        if (Input.GetKeyDown(KeyCode.Return) && mainInputField.text.Contains(textbox.text) == true)
        {
            wordIsInFile(mainInputField.text);
        }
        else if (Input.GetKeyDown(KeyCode.Return) && mainInputField.text.Contains(textbox.text) == false)
        {
            wordIsInFile(mainInputField.text);
        }
    }
}

参考我的游戏

我的问题:

我想让它让玩家必须猜测一个包含两个随机生成的字母的单词(显示在输入字段上方)。

然而到目前为止,玩家可以输入一个仅包含两个随机生成的字母中的一个的单词,并且程序仍然会接受他们的输入。

我不希望这种情况发生。我想对游戏进行编程,使其不接受玩家的输入,直到它们包含两个随机生成的字母,而不仅仅是一个。

例如,在我向您展示的图像中,我可以输入“joker”,它会接受输入并生成一组新的随机生成的字母。然而,joker 只有一个“j”而不是一个“z”,所以它不应该是正确的。唯一应该接受的词是同时包含 J 和 Z 的词,即 jazz

4

2 回答 2

1

您可以使用String.Contains().

假设要在字符串中比较一组字母:

string lettersToCompare;

并且您的用户输入是另一个字符串,例如:

string userInput;

您可以执行以下操作:

string lettersToCompare;
string userInput;

bool isMatchingAllCharacters = true;
//Compare each character of the string
foreach (char c in lettersToCompare.ToCharArray())
{
    //if the userInput do not contain this character, you already now it won't match every character.
    if (!userInput.Contains(c.ToString()))
    {
        isMatchingAllCharacters = false;
        break;
    }
}

if (isMatchingAllCharacters)
{
    Debug.Log("All matched");
}
else
{
    Debug.Log("Something do not match");
}

如果您使用,您可以避免char-string转换LinQ

using System.Linq;

string lettersToCompare;
string userInput;

bool isMatchingAllCharacters = true;
//Compare each character of the string
foreach (char c in lettersToCompare)
{
    //if the userInput do not contain this character, you already now it won't match every character.
    if (!userInput.Contains(c))
    {
        isMatchingAllCharacters = false;
        break;
    }
}

if (isMatchingAllCharacters)
{
    Debug.Log("All matched");
}
else
{
    Debug.Log("Something do not match");
}
于 2020-11-09T13:40:28.023 回答
0

使用Intersect()from怎么样System.Linq()

string
    generatedLetters = "jz",
    userInput = "joker";

if (generatedLetters.Intersect(userInput).Count() == userInput.Length)
{
    //yes! good!
}
else
{
    //too bad..
}

在此处输入图像描述

Intersect()字符数必须与generatedLetters字符数匹配才能满足您的条件。

于 2020-11-09T14:05:10.263 回答