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