微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让问题在回答并点击播放按钮后一一显示

如何解决如何让问题在回答并点击播放按钮后一一显示

我是 Unity 新手,尝试在回答并点击播放按钮后将问题一一显示

public class PlayGame : MonoBehavIoUr
{
 
    public string[] questions = {"What is 10+10","What is 20+20","What is 30+30","What is 40+40","What is 50+50"};
    public string[] correctAnswer = {"20","40","60","80","100"};

    public Text question;
    public InputField answer;
    public int selection;


    // Start is called before the first frame update
    void Start()
    {
     question.text = questions[selection];      
    }


    public void CheckAnswer()
    {
        if (answer.text == correctAnswer.ToString())            
        {
            Debug.Log("Answer is Correct");
         //display next question
            
        }
        else
        {
            Debug.Log("Answer is not Correct");
            //display next question
        }
    }
}

解决方法

这应该很简单

private int selection = -1;

void Start()
{
    ShowNextQuestion();     
}

private void ShowNextQuestion()
{
    selection++;
    if(selection >= questions.Length - 1) 
    {
        // You said you wanted to restart the questions so simply do
        selection = 0;
    }

    question.text = questions[selection];
}

public void CheckAnswer()
{
    if (answer.text.Equas(correctAnswer[selection]))            
    {
        Debug.Log("Answer is Correct");
    }
    else
    {
        Debug.Log("Answer is not Correct");
    }

    ShowNextQuestion();
}

让我告诉你,一般来说,将问题和答案存储在两个单独的数组中并不是一个好主意。

  • 您无法确定两个单独的数组总是具有相同的长度
  • 在中间添加或删除问题时,您有双重工作
  • 想象一下,以后想要随机化问题的顺序......你会忘记哪个答案属于哪个问题

所以我建议你宁愿把它们结合在一起,像这样的类型

[Serializable]
public class Question
{
    // Allow to edit these in the Inspector but nowhere else
    [SerializeField] private string _text;
    [SerializeField] private string _answer;

    // Other classes may only read these
    public string Text => _text;
    public string Answer => _answer;

    // Constructor 
    public Question(string text,string answer)
    {
        _text = text;
        _answer = answer;
    }
} 

现在在你的组件中你宁愿通过检查器设置它们或通过

初始化它们
public Question[] questions = {
    new Question("What is 10+10","20"),new Question("What is 20+20","40"),new Question("What is 30+30","60"),new Question("What is 40+40","80"),new Question("What is 50+50","100")
};

然后当然要相应地更改代码以访问这些

private void ShowNextQuestion()
{
    selection++;
    if(selection >= questions.Length - 1) 
    {
        // You said you wanted to restart the questions so simply do
        selection = 0;
    }

    question.text = questions[selection].Text;
}

public void CheckAnswer()
{
    if (answer.text.Equals(questions[selection].Answer))           
    {
        Debug.Log("Answer is Correct");
    }
    else
    {
        Debug.Log("Answer is not Correct");
    }

    ShowNextQuestion();
}

现在正如所说的那样,这也允许通过在开始之前重新排列问题来为您的应用提供一些随机性:

using System.Linq;

...

private void Start()
{
    questions = questions.OrderBy(q => Random.value).ToArray();

    ShowNextQuestion();
}

private void ShowNextQuestion()
{
    selection++;
    if(selection >= questions.Length - 1) 
    {
        // You said you wanted to restart the questions so simply do
        selection = 0;
        questions = questions.OrderBy(q => Random.value).ToArray();
    }

    question.text = questions[selection].Text;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。