【问题标题】:Generate several random numbers, one of which must be the correct answer to a sum?生成几个随机数,其中一个必须是总和的正确答案?
【发布时间】:2014-04-03 14:55:34
【问题描述】:

我创建了一个 Space Invaders 游戏,其中玩家必须射击显示随机数的小行星。在场景开始时也会随机生成一个总和。一旦玩家射击了一颗小行星,场景就会重新加载,正确答案会获得积分。

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

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

#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 --;
    }

}

【问题讨论】:

  • 这不是javascript,是吗?
  • 为什么不随机选择 4 颗小行星和正确答案的一颗而不是 5 颗随机小行星?
  • @Bergi 看起来“unityscript”非常类似于 javascript,并且经常混淆。
  • @JamesMontagne 或 UnrealScript...(尽管我认为您在这个方面是对的。)

标签: random unity3d unityscript


【解决方案1】:

照你做的,为你的小行星生成 5 个随机数。

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

【讨论】:

    【解决方案2】:

    你只需要抽象你的逻辑。

    我能提出的最佳论点是,简单地说,在构建小行星之前构建随机数。

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

    我会简单地编码:

    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]) }
     }
    

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

    【讨论】:

    • 谢谢,我试试看。
    猜你喜欢
    • 2015-07-07
    • 2018-06-28
    • 2014-01-16
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2018-12-04
    相关资源
    最近更新 更多