私はクラス用のゲームを作っています。ゲームの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);
}
}