У меня есть сетка, и у меня есть функция-член Move (int), которая должна перемещать значок движителя в любом направлении, к которому он в данный момент обращен, с количеством пробелов.Если где-либо перед двигателем, куда он хочет перейти, есть символ блока ('#'), функция должна завершиться сбоем и оставить курсор в правильном месте.Кажется, что оператор 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;
}