Действительно, задача одна, а просишь другое.
По словесному описанию понятно, я даже делал такое в боте для TimeZero, правда там гексы.
И ходил не очень оптимально, но там так и нужно было, т.к. дальность действия оружия не маленькая.
1. Вычисляем азимут на ближайшего моба, это же предпочитаемый азимут движения.
2. Пока не важно есть прямой путь к мобу или нет. Есть определённый выбранный оптимальный радиус при достижении которого начинаем искать обход.
3. Проверяем на линии между персом и мобом нет ли препятствий (стен) ближе, чем заданное расстояние.
4. Если препятствие есть идём на моба...
5. Пока расстояние до препятствия больше размера радиуса из п.2 идём на моба
6. Если равно или меньше ищем обходной путь...
6.1 От выбранного направления на расстоянии радиуса из п.2 проверяем точки на окружности со сдвигом в N градусов поочерёдно в обе стороны.
Т.е. на 5 градусов левее направления преведущего движения, на 5 правее, на 10 левее, на 10 правее и т.д. пока не всретим открытое место.
6.2 Вычисляем новый азимут движения, на новую точку. Берём чуть запас в ту же сторону чтоб не идти впритирку.
6.3 Пока идём в этом направлении проверяем не открылся ли из текущей точки прямой путь.