алгоритм C ++ 9×9 проверка траектории движения шара

Там есть клеточная доска 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;
}

-3

Решение

В вашем коде много проблем, и трудно понять, как его можно исправить без полного переписывания. Вот несколько указателей:

  1. Когда вы рекурсивно вызываете функцию, вам нужно что-то сделать
    с возвращаемым значением. На данный момент вы выбрасываете это.

  2. Ваш код имеет неопределенное поведение потому что это не всегда возвращает значение. Рассмотрим случай, когда y1 - 1 >= 0, Ты позвонишь moveCheck(), отбросить возвращаемое значение (при условии, что оно вообще возвращается), а затем выйти из условного блока, после чего функция завершается, ничего не возвращая.

  3. У вас есть функция-член, которая, похоже, не проверяет какие-либо переменные-члены. куда
    Вы проверяете, есть ли на пути препятствия?

  4. Не совсем понятно, что x1, y1, x2, а также y2 являются. Либо дайте им самодокументированные имена, либо предоставьте документирующие комментарии. Я предполагаю, что они являются исходными и целевыми координатами, но неясно, почему вы сравниваете их друг с другом, если вас интересует наличие шаров на пути.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]