需要帮助编程战列舰位置选择器/检查器

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)

如果在这里看不到,那么所有内容都已初始化并设置.问题在于用于将船舶置于"随机"位置的数学/逻辑.

apa*_*cay 2

首先:你的所有船只都会水平行驶,你还应该随机化船只的放置方向。

我有两种方法来面对这个问题:

  1. 首先安装初始位置,然后查看船舶是否适合。
  2. 首先列出所有可用位置,然后随机化一个等于列表长度的数字

1 - 递归查找随机初始位置 (x,y)(如果不重新抛出位置,则该位置应该是空闲的)。在递归“ lookForPos ”方法中,创建一个randomPlacementDirection,并从中创建一个标志(例如 isHorizo​​ntal)。如果不适合(从开始到最终位置的长度超出矩阵的大小),则重新抛出。覆盖位置(位置,位置+1,位置+2,...,位置+n),其中“n”是你的船的长度,位置是x,y对,+1仅影响其中一个基数(取决于是否为水平)如果其中任何一个也被占用,则重新抛出。最终你会得到你需要的东西。

2 - 列出所有适合的位置(“for”结构),水平和垂直,然后随机化列表的长度。