0

これはすでに回答されている可能性があることは知っていますが、私が見つけたすべての場所では、正しく機能しません。Greenfoot でゲームを作成していますが、問題が発生しています。そこで、カウンターが 600 に達するたびに乱数を生成し、その乱数が 1 に等しいかどうかをテストし、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 秒待ってから、次の 1 秒以内に無敵を作成します。20 秒ごとに 10% の確率が必要な場合は、else ブランチと「then」ブランチのカウンターをリセットする必要があります (または、最初の if 内でリセットするだけです)。

于 2015-04-30T09:51:26.723 に答える