Как сделать Random.Range () в единице более случайным? - PullRequest
0 голосов
/ 12 января 2020
int runMade=Random.Range(1,7)

Random.Range () в единице генерирует одни и те же числа много раз. Я также заметил, что он генерирует небольшие числа, такие как 1 или 2, много раз. Я сейчас работаю над игрой в крикет, и поэтому мне нужно больше случайной генерации. Есть ли способ сделать поколение более случайным?

1 Ответ

0 голосов
/ 12 января 2020
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GenerateRandom : MonoBehaviour
{
    private List<int> lastNumbers;
    void Start()
    {
        lastNumbers = new List<int>();
        //Use a seed to get the same numbers every time.
        //https://docs.unity3d.com/ScriptReference/Random-state.html
        //Random.InitState(932903292);

        for (int i = 0; i < 10; i++)
        {
            Debug.Log("Random number: " + GenerateRandomNumber());
        }
    }

    public int GenerateRandomNumber()
    {
        //The highest number you want here. The lower number is inclusive, higher one exclusive.
        int rand = Random.Range(0, 10);

        //Regenerate while the lastNumbers contains random.
        while (lastNumbers.Contains(rand))
        {
            rand = Random.Range(0, 10);
        }

        //Store it.
        AddNumberToList(rand);

        //Give back the number we generated.
        return rand;
    }

    void AddNumberToList(int number)
    {
        if (lastNumbers.Count > 3)
        {
            lastNumbers.RemoveAt(lastNumbers.Count - 1);
        }
        lastNumbers.Insert(0, number);
        Debug.Log("Last numbers: ");
        for (int i = 0; i < lastNumbers.Count; i++)
        {
            Debug.Log($"Index ({i}): {lastNumbers[i]}");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...