java – 战舰游戏 – 船舶重叠

前端之家收集整理的这篇文章主要介绍了java – 战舰游戏 – 船舶重叠前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用ACM库在 Java中编写一个简单的战舰游戏.
游戏开始后,应该将船只放在画布上的随机位置,但问题是船只可能会互相覆盖,这在游戏中是不允许的.如何避免将船放在彼此之上?

我的代码是:

  1. private void putSmallShips() {
  2. for (int i = 0; i < SMALL_SHIP_QUANTITY; i++){
  3. smallShip = new GRect(SMALL_SHIP_WIDTH,SHIP_HEIGHT);
  4. int x = rgen.nextInt(10,510);
  5. int y = rgen.nextInt(10,510);
  6. while (true){
  7. gobj = getElementAt(x,y);
  8. if (gobj == null) break;
  9. x = rgen.nextInt(10,510);
  10. y = rgen.nextInt(10,510);
  11. }
  12. smallShip.setLocation(x,y);
  13. add(smallShip);
  14. }
  15. }
  16.  
  17. private void putMiddleShips() {
  18. for (int i = 0; i < MIDDLE_SHIP_QUANTITY; i++){
  19. middleShip = new GRect(MIDDLE_SHIP_WIDTH,530);
  20. int y = rgen.nextInt(10,530);
  21.  
  22. while (true){
  23. gobj = getElementAt(x,y);
  24. if (gobj == null) break;
  25. System.out.println("opa!");
  26. x = rgen.nextInt(10,530);
  27. y = rgen.nextInt(10,530);
  28. }
  29. x = x + i * 10;
  30. y = y + i * 10;
  31. middleShip.setLocation(x,y);
  32. add(middleShip);
  33. }
  34. }
  35.  
  36. private void putBigShips() {
  37. for (int i = 0; i < BIG_SHIP_QUANTITY; i++){
  38. bigShip = new GRect(BIG_SHIP_WIDTH,550);
  39. int y = rgen.nextInt(10,550);
  40. while (true){
  41. gobj = getElementAt(x,550);
  42. y = rgen.nextInt(10,550);
  43. }
  44. bigShip.setLocation(x,y);
  45. add(bigShip);
  46. }
  47. }

如你所见,我在for循环中放了一个while循环,但它没有帮助.

解决方法

首先,我建议你拆分模型层和表示层.

换句话说,您可以定义类BattleShip,该类将保存船舶位置,大小和另一个属性,它还可以包含检查它是否与另一艘船相交的方法.

然后,只有当实例不与集合中存在的任何实例相交时,您才可以创建实例并将它们添加到集合中.

然后你可以一次性在屏幕上渲染它们.

猜你在找的Java相关文章