Мне удалось создать поле ввода, которое можно проверять и проверять по вопросу, создавая другое текстовое поле и связывая его с указанным вопросом, поэтому, например, если значение вопроса равно «1», ответ будет быть '1'. Затем я сделал сравнение текста, так что если то, что пользователь написал = это текстовое поле, ответ будет правильным.
Однако я понимаю, что иногда кто-то может написать что-то еще. Например, в вопросе «Что вы думаете о тиграх» нет единственно возможного ответа. И, следовательно, способ, которым я это сделал для поля ввода, точно не работает (не так ли?).
Я провел довольно много исследований и узнал о словарях, но, поскольку у них есть только одно ключевое значение, которое не помогло бы, а затем я узнал о списках, которые могут?
Так что мой вопрос в том, возможно ли и как создать список, в котором целочисленные значения каким-то образом связаны со значениями всеобъемлющего вопроса, так что если случайное значение равно 1, значение списка также равно 1, и затем проверьте, соответствует ли написанное любому из ответов с этим случайным значением.
Если то, что я только что сказал, не имело смысла, вот пример:
Текущее поведение:
ОПРОС: Тебе нравятся кошки?
ПОЛЕ ВВОДА: Да, я делаю
СКРЫТОЕ ТЕКСТОВОЕ ПОЛЕ: Да, я делаю
поле ввода = скрытое текстовое поле и, следовательно, правильное значение
Идеальное поведение:
ОБЗОР: Вы любите кошек?
ВХОДНОЕ ПОЛЕ: Я люблю кошек
ВОЗМОЖНЫЕ ОТВЕТЫ: я люблю кошек, да, я делаю и т.д.
INPUT FIELD содержит ответ в списке, который соответствует вопросу и, следовательно, правильный.
Я думал, что вы могли бы использовать функцию .Contains
, но я не знал, как связать все это вместе.
EDIT:
Я пытался решить эту проблему путем создания словаря и поиска ключа (который, я считаю, был правильным способом сделать это), но по какой-то причине этот код даже не работает при его проверке? (похоже, что функция .containsKey не работает?)
public string questions = "hi;weird;by";
Dictionary<int, string> tester = new Dictionary<int, string>();
// Use this for initialization
void Start ()
{
tester.Add(1, questions);
tester.Add(2, "hello");
tester.Add(3, "by");
tester.Add(4, "hi");
tester.Add(5, "bye");
}
// Update is called once per frame
void Update ()
{
}
public void hello ()
{
if(tester.ContainsKey(2))
{
string value = tester[2];
Debug.Log("Correct");
}
}
РЕДАКТИРОВАТЬ 1:
Следуя тому, что сказал trashr0X, я попытался сделать это, имея скрипт словаря в основной камере и скрипт в поле ввода, но по какой-то причине, когда я загружаю его, на консоли ничего не работает:
СПИСОК
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Linq;
public class Listpractice : MonoBehaviour
{
Dictionary<int, List<string>> tester = new Dictionary<int, List<string>>();
List<string> possibleAnswersToQuestionZero = new List<string>();
// Use this for initialization
void Start () {
possibleAnswersToQuestionZero.Add("Hello");
possibleAnswersToQuestionZero.Add("By");
tester.Add(0, possibleAnswersToQuestionZero);
}
// Update is called once per frame
void Update ()
{
}
public void hello ()
{
var toCheck = tester[0].FirstOrDefault(x => x == GameController.hello);
if (toCheck != null)
{
Debug.Log("Hi!");
}
}
}
ПОЛЕ ВВОДА
public class QAClass07
{
public string Answer = "";
public string Question = "";
QAClass07 result = new QAClass07();
}
public static string hello;
void Start()
{
GameObject a = gameObject;
hello = a.transform.Find("Text").GetComponent<Text>().text;
}
// registers what the user writes
public void getInput(string guess)
{
// Does something assuming someone enters something
if (GetComponent<InputField>() != null)
{
hello = GetComponentInChildren<Text>().text;
}
}