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;
void Start() /*when the game starts*/
{
char c = characters[Random.Range(0,characters.Length)];
textbox.text = c.ToString();
}
void Update()
{
string[] lines = System.IO.File.ReadAllLines(@"C:UsersllucDownloadswords_alpha.txt");
foreach (string x in lines)
{
if (Input.GetKeyDown(KeyCode.Return)
&& mainInputField.text.Contains(textbox.text) == true
&& mainInputField.text.Contains(x) == true)
{
char c = characters[Random.Range(0, characters.Length)];
textbox.text = c.ToString();
mainInputField.text = "";
}
else if (Input.GetKeyDown(KeyCode.Return)
&& mainInputField.text.Contains(textbox.text) == false
&& mainInputField.text.Contains(x) == false)
{
mainInputField.text = "";
}
}
}
}
参考我的游戏
没有失误,但当我运行游戏时,它非常滞后。我想这是因为程序正在读取文本文件words_alpha.txt,其中包含所有英文单词。
然而,即使它很滞后,当我输入一个完全随机的单词,与文本文件中的任何单词都不匹配时,程序仍然会接受这个单词。
我的代码有问题。。。
我想让我的代码做什么?
接受包含输入框上方显示的随机生成字母的单词。(有效(
接受英语词典中的有效单词(在我的情况下,这是一个名为words_alpha.txt的文本文件(。(这不起作用(
您应该从Start()
方法而不是Update()
读取文件,因为文件只需要读取一次,而不是每帧。这将消除滞后。
此外,您在每个帧上循环浏览文件,这是不必要的。你应该移动
if (Input.GetKeyDown(KeyCode.Return))
到CCD_ 4环路之外。您可能应该在if
语句中调用另一个函数。Update()
可能看起来更像:
void Update()
{
if (Input.GetKeyDown(KeyCode.Return) &&
mainInputField.text.Contains(textbox.text))
{
wordIsInFile(mainInputField.text);
//Remaining code that you want to use
}
else
{
//whatever needs to be done in the else statement
}
}
然后是在数组中循环的函数:
void wordIsInFile(string word)
{
foreach (var item in lines)
{
if (word == item)
{
//Perform tasks on word
//and whatever else
}
}
}
只需在Start()
之外声明string[] lines
,但在Start()
中初始化它,以确保它是一个全局变量。这将消除滞后,并且效率更高,因为除非按下KeyCode
,并且mainInputField
包含一些字符串,否则您不会一直在数组中循环。