2010-12-12 3 views
0

私はクラス用のゲームを作っています。ゲームの1つの要素は、ArrayListに格納されている複数のキャベツを表示しています。このArrayListは、Good Cabbageの20、10、Bad Cabbageの固定数でなければなりません。ループでオブジェクトのArrayListを作成し、重複しているオブジェクトを確認します

キャベツが作成されると、表示されるときに重複しないようにしたいと思います。私がこの問題に遭遇しているところは、重複するキャベツが見つかった場合、戻ってその場所に新しいキャベツを作り出す方法がわからないからです。これまでは、コードがオーバーラップを検出すると、ループを停止するだけです。私は適切にループを逃してしまい、索引で再始動するのに問題があると思います。

これまで私がこれまで持っていたことは次のとおりです。どんな提案も大歓迎です。

 // Initialize the elements of the ArrayList = cabbages 
    // (they should not overlap and be in the garden) .... 
    int minX = 170 ; 
    int maxX = 480; 
    int minY = 15; 
    int maxY = 480; 
    boolean r = false; 
    Cabbage cabbage; 
    for (int i = 0; i < N_GOOD_CABBAGES + N_BAD_CABBAGES; i++){ 
     if (i % 2 == 0){ 
     cabbage = new GoodCabbage((int)(Math.random()* (maxX-minX + 1))+ minX, 
       (int)(Math.random()*(maxY-minY + 1))+ minY,window); 
     } 
     else { 
      cabbage = new BadCabbage((int)(Math.random()* (maxX-minX + 1))+ minX, 
        (int)(Math.random()*(maxY-minY + 1))+ minY,window); 
      } 
     if (i >= cabbages.size()){ 
     // compares the distance between two cabbages 
      for (int j = 0; j < cabbages.size(); j++){ 
       Point c1 = cabbage.getLocation(); 
       Cabbage y = (Cabbage) cabbages.get(j); 
       Point c2 = y.getLocation(); 
       int distance = (int) Math.sqrt((Math.pow((c1.x - c2.x), 2) + Math.pow((c1.y - c2.y),2))); 
       if (distance <= (CABBAGE_RADIUS*2) && !(i == j)){ 
        r = true; 
       } 
      } 
     if (r){ 
      break; 
      } 
     cabbage.draw(); 
     cabbages.add(i, cabbage); 
     }  
    } 

答えて

0

キャベツのオブジェクトを作ってから投げているようですが、それは(些細な)無駄です。

ランダムなXとYを選んで、その場所に空きがあるかどうかチェックして、良いスポットがあるときにキャベツを作ってみませんか?オブジェクト全体を作成したり破棄したりするのではなく、数をチャーンします。さらに、良いキャベツと悪いキャベツのためにランダムな場所コードを繰り返す必要はありません。

INT X、Y は(cabbageOverlaps(X、Y、リスト)

//そのxでキャベツを作成しながら、{ // xとy を選択}、Y、およびリストに追加します

boolean cabbageOverlaps(int x、int y、ArrayList existingCabbages)

1

これを行う最も簡単な方法は、おそらく別のループを追加することです。

do ... whileループは、常に少なくとも1回の繰り返しが必要な場合に適しています。次のようなものがあります。

関連する問題