私はこのコードをあまりにも長い間見つめていたと思いますが、それを見ていません。私は小さなゲームを書いています。その一部は、いくつかのオブジェクト (現在は形状) を生成します。シェイプが作成されると、クラスによって定義されたオブジェクトとして ArrayList に追加されます。シェイプの数が増えると、シェイプが重なる可能性が高くなることに気付きました。これを修正したいと考えています。ArrayList 内の既存の各オブジェクトの Y 座標に対して Y 座標をチェックすることで、そうしようとしています。しかし、私の人生では、一意の Y 値を生成するまでチェック関数を繰り返し続ける方法を思い出せません。
私の最初の解決策は do...while ループですが、何らかの理由で true を返し続けます。
質問に不可欠な部分だけを残して、コードを少し単純化しました。私は何が欠けていますか?助けてくれてありがとう。
編集: また、ゲームの進行に合わせてオブジェクトが ArrayList に追加されたり、ArrayList から削除されたりすることにも注意してください。ゲーム中にオブジェクト (形状) が削除されるたびに、再生成されます。これは、ゲーム中に作成されるすべてのオブジェクトについて、既存のオブジェクトと照合する必要があることを意味します。
int x, y;
int numShapes = 10;
ArrayList<ShapeObject> soArray = new ArrayList<ShapeObject>();
private boolean checkY(int yy) {
for(int i = 0; i < soArray.size(); i++) {
if(soArray.get(i).oY == yy) {
return true;
}
}
return false;
}
public void makeShapes() {
for(int i = 0; i < numShapes; i++) {
if(soArray.size() < numShapes) {
x = rand.nextInt(width - 45) + 45;
do {
y = rand.nextInt(height - 4) + 2;
} while(checkY(y));
soArray.add(new ShapeObject());
}
}
}
class ShapeObject {
int oX = x;
int oY = y;
}