我有一个网格,并且有一个名为Move(int s)的成员函数,该函数应将移动器图标沿其当前面对的任何方向移动,即“ s”个空格。如果要移动的移动器前面的任何地方都有一个块字符('#'),则该函数将失败并将光标留在正确的位置。看起来bool语句始终等于true,但是我似乎找不到代码中的位置。
在我的示例输出中,移动功能从未失败,移动器似乎总是穿过墙壁或替换墙壁。
我不会发布所有4个方向,但我会发布北和西:
bool Grid::Move(int s) {
bool canMove = true; //initialize the bool variable
if (direction == NORTH) {
if ((mRow - s) >= 0) {
for (int i = mRow; i >= (mRow - s); i--) {
if (matrix[i][mCol] == '#') {
canMove = false;
} else if (matrix[i][mCol] != '#') {
canMove = true;
}
}
if (canMove == true) {
matrix[mRow][mCol] = '.';
mRow = (mRow - s);
matrix[mRow][mCol] = '^';
return true;
}else{
matrix[mRow][mCol] = '^';
}
} else
return false;
} else if (direction == WEST) {
if ((mCol - s) >= 0) {
for (int i = mCol; i >= (mCol - s); i--){
if (matrix[mRow][i] == '#'){
canMove = false;
} else if (matrix[mRow][i] != '#')
canMove = true;
}
if (canMove == true) {
matrix[mRow][mCol] = '.';
mCol = (mCol - s);
matrix[mRow][mCol] = '<';
return true;
}else
matrix[mRow][mCol] = '<';
}else
return false;
}
答案 0 :(得分:1)
您要在循环的每次迭代中设置canMove
。上一次通过时获得的任何值就是它将具有的值。
由于目标是查看移动在整个持续时间内是否有效,因此无需将canMove
设置为true
,因为一旦它变为假,就应该保持这种状态。 (发生这种情况时,您可以break
退出循环。)