我正在制作这个计划,以制造一个充满战舰和战舰的战舰战场。我制作了一个代码,将最长的片段放在电路板上:
public void fieldFiller5(){
int horizontalOrVertical = random.nextInt(2);
int starth = random.nextInt(6); // the int has to be below 5
int startv = random.nextInt(6);
for (int j = 0; j<10; j++){
for(int k = 0; k<10;k++){
field[j][k]=false;
}
if (horizontalOrVertical==0){
for(int i =0; i<5; i++){
field[starth+i][startv]= true; // makes a line of 5 true
}
}
else{
for(int i =0; i<5; i++){
field[starth][startv+i]= true; // makes a line of 5 true
}
}
}
}
这完美,但现在我想把第二块放在场上,但我不希望它与第一块重叠,所以我做了一个检查机制,检查是否所有空格都是假的,如果它们不是&#39 ;它应该选择另一个数字并重新启动循环,但它并不总是运行得很好,这就是它的样子:
public void fieldFiller4(){
for (int k=0; k<2; k++){
int horizontalOrVertical = random.nextInt(2);
int starth = random.nextInt(7); // the int has to be below 6
int startv = random.nextInt(7);
if (horizontalOrVertical==0){
for(int i=0; i<4; i++){
if ((field[startv+i][starth]==true)){
starth=random.nextInt(7);
startv=random.nextInt(7);
i=0;
}
}
for(int i =0; i<4; i++){
field[starth+i][startv]= true; // makes a line of 4 true
}
}
if (horizontalOrVertical==1){
for(int i=0; i<4; i++){
if ((field[startv][starth+i]==true)){
starth=random.nextInt(7);
startv=random.nextInt(7);
i=0;
}
}
for(int i =0; i<4; i++){
field[starth][startv+i]= true; // makes a line of 4 true
}
}
}
}
然后我制作了一个打印出来的打印方法:
public void fieldPrinter(){
String row = new String("");
for (int i = 0; i<10; i++){
row = "";
for(int k = 0; k<10;k++){
if (field[i][k]==true){
row = row+ "X";
}
else{
row = row+"O";
}
}
System.out.println(row);
}
}
}
大多数时候它看起来很好,有点像这样:
OOOOOOOOOO
OXXXXXOOOO
OOOOOOOOOO
OOXOOOOOOO
OOXOOOOOOO
OOXOOOOOOO
OOXOOOXOOO
OOOOOOXOOO
OOOOOOXOOO
OOOOOOXOOO
但有时它只会做第二次,一次看起来像这样:
OOOOOXOOOO
OOOOOXOOOO
OOXOOXOOOO
OOXOOXOOOO
OOXOOOOOOO
OOXOOOOOOO
OOXOOOOOOO
OOXOOOOOOO
OOOOOOOOOO
OOOOOOOOOO
有时它们会重叠,看起来像这样:
OOOOOOXOOO
OOXOOOXOOO
OOXOOOXOOO
OOXOOXXXXO
OOXOOOOOOO
OOXOOOOOOO
OOOOOOOOOO
OOOOOOOOOO
OOOOOOOOOO
OOOOOOOOOO
我无法想出这个程序以这种方式表现的原因,任何人都可以帮助我吗?
答案 0 :(得分:2)
在您的代码中的几个地方,您有&#34; h&#34;和&#34; v&#34;混合。具体来说,您在检查碰撞时似乎field[startv][starth]
,而在填充方块时似乎field[starth][startv]
。