0

背景资料:

我正在开发一款战舰游戏,在游戏中我有一个 10x10 int[][](网格)。

我开发了一种方法,只要尚未尝试过相同的位置,它就会尝试命中该阵列或网格上的单元格。(这是为了与我对战的计算机)。

    public boolean randomShot()
{
    int row;
    int col;
    boolean wasHit = false;
    boolean complete = false;

   while (complete == false)
   {
    // Randomly generate a row and column
       row = randomizer.nextInt(ROW_COUNT);
       col = randomizer.nextInt(COLUMN_COUNT);

    if(compShots.contains("" + row + col) == false)
    {
        complete = true;
        if(checkHit(row, col) == true)
        {
            wasHit = true;

        }
        compShots.add("" + row + col);
    }

   }
    return wasHit;
}

上述方法效果很好,我很满意。

问题 :

我想开发一种基于上述方法的方法,但是在某种意义上说,如果他击中第 3 行和第 3 列,则计算机的行为会更聪明一些。然后它接下来会尝试击中第 3 行和第 4 列等。但是如果下一列或下一行超出了棋盘的边界,那么它将尝试以另一种方式进行。

while 循环目前正在使游戏崩溃,知道为什么吗?

这是我必须用更多的大脑来打阵列的方法可以这么说

    public boolean randomShotClever()
{
    int row;
    int col;
    boolean wasHit = false;
    boolean complete = false;



   while (complete == false)
   {

    // Randomly generate a row and column
       row = randomizer.nextInt(ROW_COUNT);
       col = randomizer.nextInt(COLUMN_COUNT);

       if(previousRows.size() == 0 || compShots.contains("" + (previousRows.size() -1) + (previousCols.size() -1) ))       
       {
           finalRow = previousRows.get(previousRows.size());
           if((finalRow + 1) < (ROW_COUNT -1))
           {
               finalRow = finalRow + 1;
           }
           else 
           {
               finalRow = row;
           }

           finalCol = previousCols.get(previousCols.size());
           if((finalCol + 1) < (COLUMN_COUNT -1 ))
           {
               finalCol = finalCol + 1;
           }
           else 
           {
               finalCol = col;
           }

           if(compShots.contains("" + finalRow + finalCol) == false)
           {
            complete = true;
            if(checkHit(finalRow, finalCol) == true)
            {
                previousCols.add(finalCol);
                previousRows.add(finalRow);
                wasHit = true;
            }
            compShots.add("" + finalRow + finalCol);
           }

       }


   }
    return wasHit;
}

提前感谢您提供的任何帮助。

4

1 回答 1

0

比较是倒退的

if((finalRow + 1) > (ROW_COUNT -1))
       {
           finalRow = finalRow + 1;

又在

       if((finalCol + 1) > (COLUMN_COUNT -1))

“如果我太大,让我变得更大”。

可能还有其他人喜欢它。

于 2013-04-19T01:25:20.690 回答