Там есть клеточная доска 9х9 (2d-массив) с шариками разного цвета. Игрок может переместить мяч из одной клетки в другую. Мяч может двигаться по пути, который не является шариком в ячейке между текущей ячейкой и ячейкой назначения.
Я только думаю, что я должен использовать повторение в реализации этой проверки пути.
Но я не знаю, как добиться этой функции.
Я должен был попытаться реализовать функцию. Но я знаю, что это приведет к бесконечной петле.
bool board::moveCheck(int x1, int y1, int x2, int y2)
{
if(x1==x2&&y1==y2)
return true;
else if(y1-1>=0)
board::moveCheck(x1,y1-1,x2,y2);
else if(y1+1<9)
board::moveCheck(x1,y1+1,x2,y2);
else if(x1-1>=0)
board::moveCheck(x1-1,y1+1,x2,y2);
else if(x1+1<9)
board::moveCheck(x1+1,y1+1,x2,y2);
else
return false;
}
В вашем коде много проблем, и трудно понять, как его можно исправить без полного переписывания. Вот несколько указателей:
Когда вы рекурсивно вызываете функцию, вам нужно что-то сделать
с возвращаемым значением. На данный момент вы выбрасываете это.
Ваш код имеет неопределенное поведение потому что это не всегда возвращает значение. Рассмотрим случай, когда y1 - 1 >= 0
, Ты позвонишь moveCheck()
, отбросить возвращаемое значение (при условии, что оно вообще возвращается), а затем выйти из условного блока, после чего функция завершается, ничего не возвращая.
У вас есть функция-член, которая, похоже, не проверяет какие-либо переменные-члены. куда
Вы проверяете, есть ли на пути препятствия?
Не совсем понятно, что x1
, y1
, x2
, а также y2
являются. Либо дайте им самодокументированные имена, либо предоставьте документирующие комментарии. Я предполагаю, что они являются исходными и целевыми координатами, но неясно, почему вы сравниваете их друг с другом, если вас интересует наличие шаров на пути.
Других решений пока нет …