Да очень просто, видимо я не внятно написал.
Приоритетным было направление в ту сторону, где мышь.
Грубо говоря, так.
Попытаться сдвинуть ВЕКТОР в сторону мыши
Далее анализ
ЕСЛИ Пусто ТО идти по вектору - условно говоря вперед. (то есть Vector_X мог иметь значения -1 / 0 / +1 )
Значение вектора определялось, при соотношении координат кота и мыши. Как (Х_мышь - Х кот) ( У_мышь - У_кот)
ЕСЛИ (идти вперед) И ((впереди стена) ИЛИ (метка 233) ТО идти направо. (меняем знак вектора по соотв координате на противоположный)
ЕСЛИ справа стена ТО идти налево. (меняем знак вектора по соотв координате на противоположный)
ЕСЛИ слева стена ТО ставлю метку и идти назад (меняем знак вектора по соотв координате на противоположный)
ПОКА (СЛЕВА или СПРАВА преграды (+/- 1 по массиву))
ТО ИДТИ НАЗАД В ПРОТИВОПОЛОЖНУЮ СТРОНУ
Если свободно, то сначала идти туда, где КООРДИНАТЫ МЫШИ (вперед - вбок - влево).
то есть у меня был ВЕКТОР направления КОТА и координаты МЫШИ и в итоге ВЕКТОР пытался СБЛИЗИТЬСЯ с мышью.
При этом он менял направление движения при обращении к массиву это выглядело так
pole [X_kot + ШАГ * vector_X, Y_kot + ШАГ * vector_Y ]
Грубо говоря ВЕКТОР вертелся по массиву, а от него вычислялись координаты клетки, куда хотел бы попасть кот.
естественно проверялись крайние и граничные условия, чтобы не вылететь за массив не попасть в адрес POLE [-1,-1]
и все это в цикле.
В итоге кот сначала метается по углам, но потом выходит на мышь, если только она не "снимает" метки "тупика".
|