2014-09-12 61 views
1

我目前正在创建一个教育游戏,以帮助人们学习数学,但偶然发现一个问题。C#确保随机数的存在

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

代码:

按钮

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

不要你重复的答案呢? – 2014-09-12 10:57:25

+0

除非你正在做一个反向测验(Jeopardy),'thisAnswer.text = randomNumber.ToString();'是非常错误的。 – 2014-09-12 11:47:43

回答

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(); 
} 
4

为什么你不只是添加正确的答案以及一堆其他随机错误答案?

+0

正是我想说的,如果你知道有10个答案。在正确的答案旁边生成9个错误的答案。 – 2014-09-12 10:57:29

+0

问题是一个答案吗?看起来更像是对我的评论。 – spender 2014-09-12 10:57:30