Java 如何在爪哇制作战列舰产卵器?

Java 如何在爪哇制作战列舰产卵器?,java,Java,从本质上讲,我用java编写的12级代码项目就是建造一艘战舰。我已经完成了大部分的机械工作,我只是在和一个随机的船发电机搏斗。它似乎有时在大小不同的情况下几乎起作用,然而,我经常会发现随机的团块与我想要的船不相似。基本上,二维网格上的每个点都是一个对象,它有一个名为status的int变量。如果状态=0,则它是一个水点。如果status=1,则为船点。我的代码中是否有错误,或者是否有更好的方法?谢谢你的帮助我真的很感激:) 我没有做任何其他的方法,因为我没有想到其他的方法 void addBoa

从本质上讲,我用java编写的12级代码项目就是建造一艘战舰。我已经完成了大部分的机械工作,我只是在和一个随机的船发电机搏斗。它似乎有时在大小不同的情况下几乎起作用,然而,我经常会发现随机的团块与我想要的船不相似。基本上,二维网格上的每个点都是一个对象,它有一个名为status的int变量。如果状态=0,则它是一个水点。如果status=1,则为船点。我的代码中是否有错误,或者是否有更好的方法?谢谢你的帮助我真的很感激:)

我没有做任何其他的方法,因为我没有想到其他的方法

void addBoat(int x) {
  int c=floor(random(4));//picks a random direction
  int tx, ty;//target location in array
  tx=floor(random(xs));//xs is x size of the array
  ty=floor(random(ys));//ys is the y size of the array
  for (int i=0; i<x; i++) {
    //paramaters for conditions
    if (c==0 && tx>=x-1 && sqr[tx-i][ty].status==0) {
      sqr[tx-i][ty].status=1; //to the left of the target block, status is whether it is water or boat. water is status=0, boat is status=1.
    } else if (c==1 && tx<=xs-x && sqr[tx+i][ty].status==0) {
      sqr[tx+i][ty].status=1; //to the right of the target block
    } else if (c==2 && ty>=x-1 && sqr[tx][ty-i].status==0) {
      sqr[tx][ty-i].status=1; //above the target block
    } else if (c==3 && ty<=ys-x && sqr[tx][ty+i].status==0) {
      sqr[tx][ty+i].status=1; //below the target block
    } else {
      c=floor(random(4));
      i=0;
      //if position is not possible, run again
    }
  }
}

void makeBoat() {
  addBoat(2);
  addBoat(3);
  addBoat(3);
  addBoat(4);
  addBoat(5);
}
void addBoat(int x){
int c=地板(随机(4));//拾取随机方向
int tx,ty;//数组中的目标位置
tx=地板(随机(xs));//xs是数组的x大小
ty=floor(random(ys));//ys是数组的y大小
对于(int i=0;i=x-1&&sqr[tx-i][ty]。状态==0){
sqr[tx-i][ty]。状态=1;//在目标块的左侧,状态是“水”还是“船”。水是状态=0,船是状态=1。
}else如果(c==1&&tx=x-1&&sqr[tx][ty-i]。状态==0){
sqr[tx][ty-i]。状态=1;//位于目标块上方

}否则如果(c==3&&ty在我看来,在检查您的船是否可以完全放置之前,您似乎正在放置您的船部件。当它检测到无法正确放置船时,它会重新开始,而不删除已生成的部件。另一件事是,在无法放置a b的情况下,您似乎没有任何准备就绪oat在一个选定的起始位置,在这个位置它可能会运行到一个无限循环中

总之,我建议您首先生成一组位置、方向和长度,然后检查这是否是一个有效的船放置,然后再放置(或生成一个新的集),即将其分为三种方法。如果生成的船只无法放置下一个船只,则无限循环的可能性仍然很小,因此您可能需要进行一些检查以防止出现这种情况(如果单个船只的尝试次数超过10000次或其他情况,可能会完全删除状态并重新开始)


您还应该在状态/方向中使用枚举而不是整数,以使其更具可读性。如果您的状态仅存储是否有水或船,您也可以使用布尔值。

在我看来,在检查船是否可以完全放置之前,您似乎正在放置船件。当它检测到它时,它无法在不删除已经生成的片段的情况下,正确地放置它重新开始的船。另一件事是,在不可能将船放置在选定的起始位置的情况下,您似乎没有任何准备就绪的内容,此时它可能会进入无限循环

总之,我建议您首先生成一组位置、方向和长度,然后检查这是否是一个有效的船放置,然后再放置(或生成一个新的集),即将其分为三种方法。如果生成的船只无法放置下一个船只,则无限循环的可能性仍然很小,因此您可能需要进行一些检查以防止出现这种情况(如果单个船只的尝试次数超过10000次或其他情况,可能会完全删除状态并重新开始)

您还应该为您的状态/方向使用枚举而不是整数,以使其更具可读性。如果您的状态仅存储是否有水或船,您还可以为它们使用布尔值。

Does
random()
工作正常?此外,我会选择更好的var名称。例如,为什么不将
c
重命名为
direction
并将
x
重命名为
boat\u size
呢?如果你必须添加注释,这意味着你的var名称不好。:
random()
工作正常?此外,我会选择更好的var名称。例如,为什么不将
c
重命名为
direction
x
重命名为
boat\u size
呢?如果你必须添加注释,这意味着你的var名称不好。:)