Joe*_*Joe 6 java loops while-loop placement
我正在尝试开发单面战舰游戏,我几乎所有设置.我只需要包含一个此时保存的数组,5,Ships对象.我为每艘船创建的类称为Ships.java.早些时候我在初始化阵列时遇到了问题,但已经解决了.
当我尝试从阵列中的索引拉入船的长度(2,3,4或5)时,问题就出现了.我不确定如何在概念上放置船只.
我觉得我已经尝试过do-whiles,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);
}
Run Code Online (Sandbox Code Playgroud)
如果在这里看不到,那么所有内容都已初始化并设置.问题在于用于将船舶置于"随机"位置的数学/逻辑.
首先:你的所有船只都会水平行驶,你还应该随机化船只的放置方向。
我有两种方法来面对这个问题:
1 - 递归查找随机初始位置 (x,y)(如果不重新抛出位置,则该位置应该是空闲的)。在递归“ lookForPos ”方法中,创建一个randomPlacementDirection,并从中创建一个标志(例如 isHorizontal)。如果不适合(从开始到最终位置的长度超出矩阵的大小),则重新抛出。覆盖位置(位置,位置+1,位置+2,...,位置+n),其中“n”是你的船的长度,位置是x,y对,+1仅影响其中一个基数(取决于是否为水平)如果其中任何一个也被占用,则重新抛出。最终你会得到你需要的东西。
2 - 列出所有适合的位置(“for”结构),水平和垂直,然后随机化列表的长度。