我正在尝试开发一款单面战舰游戏,并且几乎所有内容都已设置好。我只需要合并一个当前保存的数组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);

    }

如果此处看不到所有内容,则所有内容均已初始化并设置。问题在于用于将船只放置在“随机”位置的数学/逻辑。

最佳答案

首先:您的所有船只都将变为水平方向,您还应该随机分配船只的放置方向。

有两种方法可以解决这个问题:

  • 首先适合初始pos,然后查看船是否适合。
  • 首先列出所有可用位置,然后随机分配一个等于列表长度的数字

  • 1-递归查找随机初始位置(x,y)(该应该是免费的,如果不是,则应将重新抛出一个位置)。在递归的“ lookForPos ”方法中,创建一个 randomPlacementDirection ,然后从中创建一个标志(例如isHorizo​​ntal)。 如果不适合(从开始位置到最终位置的长度溢出矩阵的大小),则重新抛出
    掩盖位置(位置,位置+1,位置+2,...,位置+ n),其中“n”是您的船长,位置是x,y对,而+1仅影响其中一个基数。 (取决于isHorizo​​ntal是否)(如果其中任何一个也被占用)重新抛出
    最终,您将拥有所需的东西。

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

    10-07 19:11
    查看更多