|
#1
|
|||
|
|||
11
Здравствуйте
Последний раз редактировалось WhiteKing, 14.12.2009 в 14:23. |
#2
|
||||
|
||||
Самое сложное в этой задаче - это включить мозг у ваших зверюг. Т.е. при определении следующего хода зверюга должна помнить хотя-бы часть предыдущих и чем больше она будет помнить тем более короткий маршрут будет.
А разве мышка не должна убегать от кошки при встрече? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
Я такое решал на первом курсе.
Первое, что приходит на ум - найди в сети алгоритм обхода препятствий. Как раз твой случай - кот должен обойти препятствия и найти мышь. Мое решение было таким Кот стремился к мышке. Если впереди преграда - он идет в первый свободный проход, предпочитая, например сначала тыкнуться вправо. и так до поворота назад, так он продолжает идти пока или слева или справа не кончится стена в сторону, где "координаты" мыши. воткнувшись в тупит ставит "невидимые" метки и больше туда никогда не пойдет, если мышь их не снимет тем, что пройдет по ним. В программе это грубо говоря выглядело кодом 233 - он ничего не значил и был также "полом", но пробегая. мышь ставил меняла 233 на 0. Зато кот догонял мышь бешенно быстро и чтобы убежать, надо было моментально искать крайтчайший путь до выхода. Азарт был, у меня даже исходники где-то валялись, но переписать ее на Дельфи нет времени, а теперь не запускается. так как делалась "под ту" архитектуру ДОС. |
#4
|
||||
|
||||
Если сильно постараться можно найти исходники - но переделывать бушь сам.
|
#5
|
||||
|
||||
Цитата:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
||||
|
||||
Да очень просто, видимо я не внятно написал.
Приоритетным было направление в ту сторону, где мышь. Грубо говоря, так. Попытаться сдвинуть ВЕКТОР в сторону мыши Далее анализ ЕСЛИ Пусто ТО идти по вектору - условно говоря вперед. (то есть Vector_X мог иметь значения -1 / 0 / +1 ) Значение вектора определялось, при соотношении координат кота и мыши. Как (Х_мышь - Х кот) ( У_мышь - У_кот) ЕСЛИ (идти вперед) И ((впереди стена) ИЛИ (метка 233) ТО идти направо. (меняем знак вектора по соотв координате на противоположный) ЕСЛИ справа стена ТО идти налево. (меняем знак вектора по соотв координате на противоположный) ЕСЛИ слева стена ТО ставлю метку и идти назад (меняем знак вектора по соотв координате на противоположный) ПОКА (СЛЕВА или СПРАВА преграды (+/- 1 по массиву)) ТО ИДТИ НАЗАД В ПРОТИВОПОЛОЖНУЮ СТРОНУ Если свободно, то сначала идти туда, где КООРДИНАТЫ МЫШИ (вперед - вбок - влево). то есть у меня был ВЕКТОР направления КОТА и координаты МЫШИ и в итоге ВЕКТОР пытался СБЛИЗИТЬСЯ с мышью. При этом он менял направление движения при обращении к массиву это выглядело так pole [X_kot + ШАГ * vector_X, Y_kot + ШАГ * vector_Y ] Грубо говоря ВЕКТОР вертелся по массиву, а от него вычислялись координаты клетки, куда хотел бы попасть кот. естественно проверялись крайние и граничные условия, чтобы не вылететь за массив не попасть в адрес POLE [-1,-1] и все это в цикле. В итоге кот сначала метается по углам, но потом выходит на мышь, если только она не "снимает" метки "тупика". Последний раз редактировалось GrenLES, 21.09.2009 в 22:18. |
#7
|
||||
|
||||
У вас, на мой взгляд все достаточно продумано, но несколько нелогично. У вас супер-кот какой-то получился, сквозь преграды видит. Я думаю надо обоим животинам изначально задавать произвольный вектор движения. Для мыши вдоль стеночки, для кота более свободно, а вот когда кот наткнется на след мыши, тогда у него уже появится достаточно четкое указание куда направлятся. Но тут как-раз и возникает вопрос куда коту двигаться по следу, от мыши или к ней. Я думаю, что надо ввести счетчик для каждой ячейки которую пересекла мышь, который будет убывать со временем до нуля. Это и будет показатель свежести следа. Тогда интересная картинка получится, когда кот при выборе неверного направления, резко метнется назад.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
||||
|
||||
ну тут все в руках создателя и его фантазии на усложнение логики поведения.
У меня это был курсовой проект. Поэтому особых изысков не было. |
#9
|
||||
|
||||
Цитата:
А вот это мне понравилось. Даже захотелось поднять старые коды и приспособить игры для Дельфи в винде.... Эдакий "свежий" след.... только тогда мыши никогда не убежать..... и коту думать не надо - взял как собака след и - АТУ! |
#10
|
||||
|
||||
не обещаю. но на канве может быть к выходным код переделаю
|
#11
|
||||
|
||||
На самом деле все не так очевидно, ведь мышь может несколько раз пересечь собственный след и тогда за котом вообще прикольно будет наблюдать.
В общем, чем дальше тем все интереснее становится. Уже начал сам подумывать о красивой реализации, дело пока только за набором спрайтов мыши и кота. Не хочется статичные картинки двигать. А автору могу предложить такие картинки: Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 22.09.2009 в 00:11. |
#12
|
|||
|
|||
Я маленько не догнал условие задачи. То ли кот знает где находится мышь в каждый момент времени то ли нет...
Я бы решал так: из лабиринта строим граф и обходим его в ширину. Как только видим мышь, то есть кот и мышь находятся в соседних вершинах, кот бросает предыдущие задание и бежит за мышью, как только мышь пропадает из поля зрения, кот опять начинает обход. |
#13
|
||||
|
||||
Вообще изначальная задача была реализовать самостоятельное прохождение кота и мышки из входа к выходу. Но в той постановке задачи не учитывалась специфика поведения этой парочки. Мы совместными усилиями тут несколько другую концепцию родили, теперь ждем авторскую реализацию.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#14
|
|||
|
|||
Страдалецъ
Интересные картинки. Последний раз редактировалось WhiteKing, 14.12.2009 в 14:24. |
#15
|
|||
|
|||
За исходниками добро пожаловать в гугл. А здесь выкладывают наработки. Давай что есть, или вопросы что не получается
|