测试随机数是否等于特定数字

时间:2015-04-29 14:35:41

标签: random greenfoot

我知道这可能已经得到了解答,但是在我发现它的所有地方,它都无法正常工作。我在Greenfoot制作游戏,而且我遇到了问题。因此,每次计数器达到600时,我都会生成一个随机数,然后测试该随机生成的数字是否等于1,如果是,则创建一个对象。出于某种原因,每次计数器达到600时都会创建对象。我对Java有点新鲜,所以它可能很简单。

import greenfoot.*;
import java.util.Random;

/**
 * Write a description of class Level_One here.
 * 
 * @CuddlySpartan
 */
public class Level_One extends World
{
Counter counter = new Counter();

/**
 * Constructor for objects of class Level_One.
 * 
 */
public Level_One()
{    
    super(750, 750, 1); 
    prepare();
}

public Counter getCounter()
{
    return counter;
}


private void prepare()
{
    addObject(counter, 150, 40);
    Ninad ninad = new Ninad();
    addObject(ninad, getWidth()/2, getHeight()/2);
    Fail fail = new Fail();
    addObject(fail, Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
}

private int spawnCounter = 0;
private int invincibleCounter = 0;
Random random = new Random();
private int randomNumber;


public void act() 
 {
     controls();
 {if (spawnCounter > 500) {
     spawnCounter = 0;
     addObject(new Fail(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
 }
 spawnCounter++;
 {if (spawnCounterTwo > 300) {
     spawnCounterTwo = 0;
     addObject(new APlus(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
   }
 spawnCounterTwo++;
  }

  if (invincibleCounter > 600)
  {
      int randomNumber = random.nextInt(10);

      if (randomNumber == 1)
      {          
          Invincible invincible = new Invincible();
          addObject(invincible, Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
          invincibleCounter = 0;
      }
      if (randomNumber == 2)
      {
          Storm storm = new Storm();
          addObject(storm, Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
      }
      else 
      {              
      }
    }
 invincibleCounter ++;
}
   }
    private int spawnCounterTwo = 100;

    public void controls()
   {

    if (Greenfoot.isKeyDown("escape"))
    {
            Greenfoot.stop();
    }
   }

}

我没有收到错误,因为它编译得很好,但是当我运行它时我有问题。有帮助吗?提前致谢!

2 个答案:

答案 0 :(得分:1)

这只是猜测,因为我看不到你的其余代码,但我怀疑你是用一些常数来播种你的随机数发生器。因此,每次运行程序时,随机数生成器都会以相同的顺序生成数字。为了确认这一点,请显示更多代码。

此外,您的括号不匹配,因此至少请显示足够的代码以匹配大括号。

答案 1 :(得分:0)

你确定它是在计数器达到600时准确创建的吗?您每帧都会递增计数器,并且默认为~30 fps速度,即20秒。然后在每一帧之后,你获得一个随机整数并有10%的几率创造一个无敌。但10%的概率平均会在10帧内出现,即​​1/3秒。然后计数器将重置,你将等待二十秒,然后在下一秒内创建一个无敌,依此类推。如果你想要每20秒有10%的几率,你需要在else分支中重置Counter,以及"然后"分支(或者只是在你的第一个if内部重置它。)