1

あなたの船が通過するグリッドワールドとアステリオドベルトの簡単なゲームを作ろうとしています。小惑星帯は、生成されるたびに 1 つの空きスペースが存在するはずです。このベルトを作成する nextAsteroidField() というメソッドがあります。

public static void nextAsteroidField()
{
    int randNum = (int)(Math.random()*15)+1;
    for(int i = 1; i < 16; i++)
    {
        if(i == randNum)
        {
        }
        else
            world.add(new Location(0, i), new Asteroid());
    }
}

このメソッドは、最初のアステロイド ベルトが作成されるときにクラスのメインから呼び出されるため、静的でなければなりません。

このメソッドが初めて呼び出されると、意図したとおりのスペースが作成されます。小惑星の前の行がグリッドの下部に到達するたびに、このメソッドを呼び出します。2回目以降はギャップがありません。

4

2 に答える 2

0

最初の呼び出しでは機能するnextAsteroidField()が、2 回目 (または 3 回目) では機能しない場合、問題は、世界から小惑星を削除していないことだと思います。

メソッドを次のように変更します。

public static void nextAsteroidField()
{
    world.clearAsteroids(); //Clear the world, so no other asteroids block the gap
                            //Of course, you have to write this function ;)
    int randNum = (int)(Math.random()*15)+1;
    for(int i = 1; i < 16; i++)
    {
        if(i != randNum)
            world.add(new Location(0, i), new Asteroid());
    }
}
于 2013-05-25T17:29:22.370 に答える
0

Random クラスを使用してみてください。

import java.util.Random;

public class Main{

static Random rnd = new Random();

public static void main( String[] args ){
    int randNum = rnd.nextInt( 16 )+1;
    for( int i = 0; i < 16; i++ )
        if( i != randNum )
            System.out.print("*");
        else
            System.out.print(" ");
    }
}
于 2013-05-25T17:12:47.740 に答える