I am writing a simple game with a battleship in Java using the ACM library. After the start of the game, ships should be placed on the canvas in random places, but the problem is that the ships can overlap each other, and this is not allowed in the game. How can I avoid placing ships above each other?
My code is:
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); } }
As you can see, I put the while loop inside the for loop, but that doesn't help.
java java-canvas acm-java-libraries
Tsiskreli
source share