生成几个随机数,其中一个必须是总和的正确答案?

时间:2014-04-03 14:55:34

标签: random unity3d unityscript

我创造了一个太空入侵者游戏,其中玩家必须射击一个显示随机数的小行星。也将在场景开始时随机生成总和。一旦玩家射击小行星,场景就会重新加载,并获得正确答案的分数。

我遇到的问题是我需要至少一个小行星才能显示正确的答案。我目前通过重新加载场景来实现这一目标,直到小行星数字与总和的答案相匹配。这可能需要很多重载并且看起来非常糟糕。有没有更好的方法来实现这一点,看起来更好,效率更高。我在下面列出了我的努力。我感谢任何评论。谢谢!

用于检查正确答案并重新加载场景的脚本。

#pragma strict

function Start ()
{

}

{

    if (
        Asteroid1_Script.asteroid1Value != (Sum_Script.sumA - Sum_Script.sumB) &&
        Asteroid2_Script.asteroid2Value != (Sum_Script.sumA - Sum_Script.sumB) &&
        Asteroid3_Script.asteroid3Value != (Sum_Script.sumA - Sum_Script.sumB) &&       
        Asteroid4_Script.asteroid4Value != (Sum_Script.sumA - Sum_Script.sumB) &&
        Asteroid5_Script.asteroid5Value != (Sum_Script.sumA - Sum_Script.sumB) 
        )

    {
        Application.LoadLevel("L1");
    }
}

随机生成总和的脚本。

#pragma strict

static var sumA :int = 0;
static var sumB :int = 0;

function Start () 
{
    var newSumA = Random.Range(6,10);
    sumA = newSumA;
    var newSumB = Random.Range(1,6);
    sumB = newSumB;

}

function Update () {
    //Question Output.

    guiText.text = sumA.ToString() + " - " + sumB.ToString()+ " =";
} 

用于生成小行星随机数的脚本。

#pragma strict

var mainCam: Camera;
static var asteroid1Value : int = 0;
var asteroid1 : Transform;
var Asteroid1Style : GUIStyle; 

function Start () 
{
    var newAsteroid1Value = Random.Range(0,10);

    asteroid1Value = newAsteroid1Value;

    asteroid1.position.x = mainCam.ScreenToWorldPoint (new Vector3 (160f, 0f, 0f)).x;
    asteroid1.position.y = mainCam.ScreenToWorldPoint (new Vector3 (0f, 450f, 0f)).y;

}

function OnGUI()
{
    var point = Camera.main.WorldToScreenPoint(transform.position);
    GUI.Label(new Rect(point.x, Screen.currentResolution.height - point.y - 530, 110, 100), asteroid1Value.ToString(), Asteroid1Style); 
}

function OnCollisionEnter(col : Collision)
{

    if(asteroid1Value == (Sum_Script.sumA - Sum_Script.sumB))
    {
        Destroy(gameObject);
        Score_Script.score ++;   
    }
    if(asteroid1Value != (Sum_Script.sumA - Sum_Script.sumB))
    {
        Score_Script.score --;
    }

}

2 个答案:

答案 0 :(得分:1)

正如您所做的那样,为您的小行星生成5个随机数。

然后生成1到5之间的随机数,这是你的随机小行星,然后将其值设置为答案。 (sumA - sumB)

答案 1 :(得分:0)

你只需抽象你的逻辑。

我可以做的最好的论据是,简单地说,在构建你的小行星之前构建你的随机数

这样,你总是有一个正确的。

我只想编码:

function start(){  
    var x = 5 //X being whatever number of asteroids you wish.
    var a = new Array();
    for(var i=0; i<x; i++){ 
        a[i] = Random.Range(0,10);
    }

    for( i in a){ buildAsteroid(a[i]) }
 }

并且...如果数字匹配,则成功。