我正在使用 ACM 库用 Java 编写一个简单的战舰游戏。游戏开始后,船只应该随机放置在画布上,但问题是船只可能会相互覆盖,这在游戏中是不允许的。我怎样才能避免船被放置在彼此之上?
我的代码是:
private void putSmallShips() {
for (int i = 0; i < SMALL_SHIP_QUANTITY; i++){
smallShip = new GRect(SMALL_SHIP_WIDTH, SHIP_HEIGHT);
int x = rgen.nextInt(10, 510);
int y = rgen.nextInt(10, 510);
while (true){
gobj = getElementAt(x, y);
if (gobj == null) break;
x = rgen.nextInt(10, 510);
y = rgen.nextInt(10, 510);
}
smallShip.setLocation(x, y);
add(smallShip);
}
}
private void putMiddleShips() {
for (int i = 0; i < MIDDLE_SHIP_QUANTITY; i++){
middleShip = new GRect(MIDDLE_SHIP_WIDTH, SHIP_HEIGHT);
int x = rgen.nextInt(10, 530);
int y = rgen.nextInt(10, 530);
while (true){
gobj = getElementAt(x, y);
if (gobj == null) break;
System.out.println("opa!");
x = rgen.nextInt(10, 530);
y = rgen.nextInt(10, 530);
}
x = x + i * 10;
y = y + i * 10;
middleShip.setLocation(x, y);
add(middleShip);
}
}
private void putBigShips() {
for (int i = 0; i < BIG_SHIP_QUANTITY; i++){
bigShip = new GRect(BIG_SHIP_WIDTH, SHIP_HEIGHT);
int x = rgen.nextInt(10, 550);
int y = rgen.nextInt(10, 550);
while (true){
gobj = getElementAt(x, y);
if (gobj == null) break;
x = rgen.nextInt(10, 550);
y = rgen.nextInt(10, 550);
}
bigShip.setLocation(x, y);
add(bigShip);
}
}
如您所见,我在 for 循环中放置了一个 while 循环,但这无济于事。