0

我知道这可能已经得到解答,但是在我找到它的所有地方,它都无法正常工作。我在 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();
    }
   }

}

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

4

2 回答 2

1

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

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

于 2015-04-29T14:39:11.473 回答
0

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

于 2015-04-30T09:51:26.723 回答