背景情報:
私は戦艦ゲームを開発していますが、ゲームには 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;
}
提供されたヘルプに事前に感謝します。