Как увеличить оценку внутри для каждого цикла в Unity?

#c# #loops #unity3d #increment

#c# #циклы #unity3d #увеличить

Вопрос:

Я использую цикл foreach для проверки ответов, введенных пользователем на заданные 5 вопросов умножения. (использование экземпляра для отображения 5 вопросов при запуске)

Теперь я пытаюсь добавить счетчик баллов и увеличить его на 1, если ответ правильный, и в зависимости от оценки я буду отображать звезды. например, если оценка меньше 3, то 1 звезда, если 4, то 2 звезды, а если 5, то 3 звезды. Я получаю только одну звездочку, даже если все ответы правильные. Кто-нибудь может сказать мне, как этого добиться, пожалуйста?

Я попытался добавить оценку внутри оператора if. но это не увеличивает значение оценки.

 public void CheckButton() 
{
    int answer;

    foreach (TestModeQuestionUI _TestModeQuestionUIRefrence in testModeQuestionExampleList)
    {
        answer = _TestModeQuestionUIRefrence.GetAnswerInputField();

        if ((_TestModeQuestionUIRefrence.a * _TestModeQuestionUIRefrence.b) == answer)
        {
            _TestModeQuestionUIRefrence.SetResultOfAnswerInputField(1);
            score  ;
        }
        else
        {
            _TestModeQuestionUIRefrence.SetResultOfAnswerInputField(2);
        }
    }

    roundCompletePanel.SetActive(true);
    CheckHowManyStars();

    ShowRoundCompletePanel(score);
}
  

Комментарии:

1. Поставьте точку останова в выражении score и посмотрите, достигли ли вы точки останова. Мы не можем сказать, является ли ответ неверным или оценка неверна.

Ответ №1:

Просто предположим здесь, что

 (_TestModeQuestionUIRefrence.a * _TestModeQuestionUIRefrence.b) == answer
  

все float значения. Никогда не сравнивайте float напрямую, используя == . Они никогда не могут быть равными, хотя логически они должны. Они могут отличаться на очень маленький «эпсилон» из-за точности с плавающей запятой.


Используйте Mathf.Approximately вместо этого, который использует именно этот маленький «эпсилон» для определения равенства.

 if (Mathf.Approximately(_TestModeQuestionUIRefrence.a * _TestModeQuestionUIRefrence.b, answer))
  

Это похоже на

 if (_TestModeQuestionUIRefrence.a * _TestModeQuestionUIRefrence.b - answer <= diferenceSmallEnoughThreshold)
  

где differenceSmallEnoughThreshold будет определенный порог для использования для euality

Комментарии:

1. хорошо, я буду использовать Mathf. Примерно здесь. и что подразумевается под добавлением точки останова, не могли бы вы, пожалуйста, объяснить, если это возможно?

2. jdweng ссылается на отладку, например, с помощью VisualStudio

3. используя Mathf. Примерно решена проблема увеличения количества баллов. Большое вам спасибо

4. что ж, если вы серьезно настроены оживить эту игру, вам лучше потратить некоторое время на изучение этой печально известной штуки с «точкой останова»!

5. @MKougiouris да, я использую debug. журнал, но, извините, я не знал, как это называется. Теперь я знаю.