我正在尝试为我的战舰程序创建一个函数,以创建一个剩余所有零件可能位于的所有位置的概率网格。我希望该网格遍历整个数组,然后检查此时是否存在物体有放置空间(水平或垂直),并在要覆盖的每个点上添加一个,向我显示哪些坐标最有可能在其上放船。 BS_GRID_ROWS和BS_GRID_COLS这两个值均保持战舰板的大小,矩阵是我想显示我的概率值的数组,而hits是一个数组(如果命中了某艘船,其数字(对应于每艘船)大于零)-如果我开枪而错过,则为1;如果在该坐标处未射击,则为0。这是我到目前为止的代码。它正在工作,但无法正确完成,它完全遗漏了几个正方形,我知道在放置任何船只之前运行它时,这是不可能的。任何帮助,将不胜感激。谢谢
void
probabilityGrid(int matrix[BS_GRID_ROWS][BS_GRID_COLS], int hits[BS_GRID_ROWS][BS_GRID_COLS], int shipSize)
{
bool isValid=true;
for (int row = 0; row< BS_GRID_ROWS; row++)
{
for (int col = 0; (col+shipSize) <BS_GRID_COLS; col++)
{
for (int hold = col; hold < shipSize; hold++)
{
if (hits[row][hold]!=0)
isValid=false;
}
if (isValid)
{
for (int hold = col; hold < shipSize; hold++)
{
matrix[row][hold]++;
}
}
isValid=true;
}
}
//For now I'm just working on the horizontal part of the algorithm.
}
最佳答案
想象(或更好地设置并通过调试器运行)BS_GRID_ROWS == 1
,BS_GRID_COLS == 1
和shipSize == 1
。
发生的情况是条件(col+shipSize) <BS_GRID_COLS
是false
,即使col == 0
可能不是您想要的,您也应该将其更改为col + shipSize <= BS_GRID_COLS
。
出于相同的原因,您应该将row<=BS_GRID_ROWS-shipSize-1
更改为row + shipSize <= BS_GRID_ROWS
。