我正在试图弄清楚如何将用户输入的船只放置在战舰游戏中。 x和y整数是10x10板上的位置。水平方向为0,垂直方向为1。 boat_length显然是船的长度(从2到5)。如果船不能放在10x10板上,如果那里还有另一艘船,我想要归还假,我也不能把它放在那里。非常感谢任何帮助!
bool userboat(char boatArray[][BOARD_SIZE],int x, int y, int orientation, int boat_length){
for(int yy = 0; yy < BOARD_SIZE; yy++){
for(int xx = 0; xx < BOARD_SIZE; xx++){
if(yy == y && xx == x){
boatArray[yy][xx] = 'B';
if(orientation == 0){
if(x+boat_length< BOARD_SIZE){
for(int boat = 0; boat<boat_length; boat++){
boatArray[yy][boat] =BOAT;
}
}else{
return false;
break;
}
}
}else{
if(yy+boat_length< BOARD_SIZE){
for(int boat = 1; boat<boat_length; boat++){
boatArray[boat][yy] =BOAT;
}
}else{
return false;
break;
}
}
}
}
return true;
}
答案 0 :(得分:0)
您需要更改以下代码:
boatArray[yy][boat] = BOAT;
要:
boatArray[yy][xx + boat] = BOAT;
让我们看一个简单的例子。如果我们想将船放置在位置(2,2),我们将整个2D阵列循环,直到我们达到xx == 2&amp;&amp;是啊== 2对吗? 好。现在我们检查这个位置(boatArray [yy] [xx])是否为空(你应该实现这个)。如果它是空的,我们做数学,看看船是否可以放在阵列内。 现在你的循环看起来像这样:
for(int boat = 0; boat<boat_length; boat++)
boatArray[yy][boat] = BOAT;
这意味着boatArray [yy] [0],boatArray [yy] [1],..将获得BOAT的值。但你不希望如此。这些都是每次都是第一列。你应该做的是这个(正如我之前提到的):
boatArray[yy][xx + boat] = BOAT;
编辑:其他循环也一样。