C#确保随机数的存在

时间:2014-09-12 10:53:05

标签: c# random

我目前正在创建一款教育游戏,以帮助人们学习数学,但却遇到了问题。

我在一些立方体中随机化文本,玩家点击它来测试他们的倍数知识,但是我现在使用的代码使它偶尔在屏幕上没有正确的答案,有没有办法我能解决这个问题吗?

代码:

按钮

using UnityEngine;
using System.Collections;

public class RNG : MonoBehaviour
{
    public GUIText thisAnswer;
    public RandomiseAll reRoll;
    int randomNumber = 0;
    int miniScore = 0;

    // Use this for initialization
    void Awake ()
    {
            randomNumber = Random.Range (0, 36);

            thisAnswer.text = randomNumber.ToString ();
    }

    void OnMouseUpAsButton ()
    {

            if (randomNumber % 3 == 0) {
                    miniScore += 100;
                    reRoll.Randomise ();
                    Debug.Log (miniScore.ToString ());
            } else if (randomNumber % 3 != 0) {
                    reRoll.Randomise ();
                    Debug.Log (miniScore.ToString ());
            }
    }

}

全球重新随机

using UnityEngine;
using System.Collections;

public class RandomiseAll : MonoBehaviour {

public GUIText[] answer;

int randomNumber;
int[] test;
public void Randomise(){

    for (int i = 0; i < answer.Length; i++) {
                    randomNumber = Random.Range (0, 36);
                    answer [i].text = randomNumber.ToString ();
            }

}
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

为什么不直接添加正确答案以及其他一些随机错误答案?

答案 1 :(得分:0)

假设GuiText []答案是您保存所有可能选项的地方,解决方案可能是在随机化后循环验证至少一个答案是否正确。

此解决方案使用LINQ。

public void Randomise(){

    for (int i = 0; i < answer.Length; i++) {
        randomNumber = Random.Range (0, 36);
        answer [i].text = randomNumber.ToString ();
    }

    if (!(Answer.Any(p => (Convert.ToInt32(p)) % 3 == 0)))
        Randomise();
}

没有LINQ:

public void Randomise(){

    for (int i = 0; i < answer.Length; i++) {
        randomNumber = Random.Range (0, 36);
        answer [i].text = randomNumber.ToString ();
    }

    bool anyExist = false;
    for (int j = 0; j < answer.Length; j++)
    {
        if (System.Convert.ToInt32(answer[j].text) % 3 == 0)
        {
            anyExist = true;
            break;
        }
    }

    if (!anyExist)
        Randomise();
}