我正在尝试开发一款单面战舰游戏,并且几乎所有内容都已设置好。我只需要合并一个当前保存的数组5,Ships对象。我为每艘船创建的类称为Ships.java。早些时候,我在初始化数组时遇到问题,但是已经解决了。
当我尝试从数组中的索引中拉出一艘船的长度(2、3、4或5)时,就会出现问题。我不确定从概念上讲如何放置船只。
我觉得我已经尝试了do-while,for循环和if语句的每种组合。甚至尝试过开关盒。
目标是让计算机选择五艘船的位置,并将网格中的每个单元格(ROWSxCOLS)设置为等于NC_SHIP(未单击,再加上船)。问题在于它检查网格上随机位置附近的像元位置。还必须检查所讨论的船是否适合(从船[i] .getShipLength()中拉出)。
这是我到目前为止的代码:
int shipsPlaced = 0;
for (int i = 0; i < ships.length; i++)
{
boolean shipPlaced = false;
do
{
int randomRow = (int)(Math.random()*ROWS);
int randomCol = (int)(Math.random()*COLS);
int p = 0;
if (randomRow - ships[p].getShipLength() >= 0 && gameBoard[(randomRow - p)][randomCol] == NC_EMPTY)
{
for (int x = 0; x < ships[x].getShipLength(); x++)
{
gameBoard[(randomRow - x)][randomCol] = NC_SHIP;
shipsPlaced = shipsPlaced + 1;
if (x == ships[x].getShipLength())
{
shipPlaced = true;
p = p + 1;
}
}
}
}while (shipPlaced == false);
}
如果此处看不到所有内容,则所有内容均已初始化并设置。问题在于用于将船只放置在“随机”位置的数学/逻辑。
最佳答案
首先:您的所有船只都将变为水平方向,您还应该随机分配船只的放置方向。
有两种方法可以解决这个问题:
1-递归查找随机初始位置(x,y)(该应该是免费的,如果不是,则应将重新抛出一个位置)。在递归的“ lookForPos ”方法中,创建一个 randomPlacementDirection ,然后从中创建一个标志(例如isHorizontal)。 如果不适合(从开始位置到最终位置的长度溢出矩阵的大小),则重新抛出。
掩盖位置(位置,位置+1,位置+2,...,位置+ n),其中“n”是您的船长,位置是x,y对,而+1仅影响其中一个基数。 (取决于isHorizontal是否)(如果其中任何一个也被占用)重新抛出。
最终,您将拥有所需的东西。
2-列出所有适合的位置(“for”结构)(水平和垂直),然后随机排列列表的长度。