Как случайный диапазон можно остановить, когда индекс соответствует входу и без дублирования вопроса отображения? - PullRequest
0 голосов
/ 05 декабря 2018

В следующем коде у меня есть массив для хранения вопросов.Я хочу, чтобы это выглядело случайным, когда игра начинается.Использование questionIndex = Random.Range(0, questionPool.Length); удалось сделать, но дублирование все еще сохраняется и не останавливается в соответствии с индексом.

void Start()
{
    audioPlayer = gameObject.AddComponent<AudioSource>();
    dataController = FindObjectOfType<DataController>();

    currentRoundData = dataController.GetCurrentRoundData();
    questionPool = currentRoundData.questions;

    timeRemaining = currentRoundData.timeLimitInSeconds;
    UpdateTimeRemainingDisplay();
    Time.timeScale = 1f;
    playerScore = 0;
    questionIndex = 0;

    ShowQuestion();
    isRoundActive = true;
}

void ShowQuestion()
{
    RemoveAnswerButtons();

    questionIndex = Random.Range(0, questionPool.Length);
    QuestionData questionData = questionPool[questionIndex];
    questionText.text = questionData.questionText;

    for (int i = 0; i < questionData.answers.Length; i++)
    {
        GameObject answerButtonGameObject = answerButtonObjectPool.GetObject();
        answerButtonGameObjects.Add(answerButtonGameObject);
        answerButtonGameObject.transform.SetParent(answerButtonParent);
        answerButtonGameObject.transform.localScale = Vector3.one;

        AnswerButton answerButton = answerButtonGameObject.GetComponent<AnswerButton>();
        answerButton.SetUp(questionData.answers[i]);
    }
}

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете использовать следующий метод расширения для рандомизации коллекции

public static IEnumerable<TSource> Shuffle<TSource>(this IEnumerable<TSource> dataArray)
{
    var dataArrayList = dataArray.ToList();
    var returnValue = Enumerable.Empty<TSource>();
    for (int index = dataArrayList.Count()-1; index > 0; index--)
    {
        var randomKey = _randomGenerator.Next(1, index);
        var temp = dataArrayList[randomKey];
        dataArrayList[randomKey] = dataArrayList[dataArray.Count() - 1];
        dataArrayList[dataArray.Count() - 1] = temp;
    }
    return dataArrayList;
}

Теперь вы можете использовать расширение как

var shuffledQuestionPool = questionPool.Shuffle();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...