|
|
#1
|
|||
|
|||
11
Здравствуйте
Последний раз редактировалось WhiteKing, 14.12.2009 в 14:23. |
#2
|
||||
|
||||
Самое сложное в этой задаче - это включить мозг у ваших зверюг. Т.е. при определении следующего хода зверюга должна помнить хотя-бы часть предыдущих и чем больше она будет помнить тем более короткий маршрут будет.
А разве мышка не должна убегать от кошки при встрече? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
Я такое решал на первом курсе.
Первое, что приходит на ум - найди в сети алгоритм обхода препятствий. Как раз твой случай - кот должен обойти препятствия и найти мышь. Мое решение было таким Кот стремился к мышке. Если впереди преграда - он идет в первый свободный проход, предпочитая, например сначала тыкнуться вправо. и так до поворота назад, так он продолжает идти пока или слева или справа не кончится стена в сторону, где "координаты" мыши. воткнувшись в тупит ставит "невидимые" метки и больше туда никогда не пойдет, если мышь их не снимет тем, что пройдет по ним. В программе это грубо говоря выглядело кодом 233 - он ничего не значил и был также "полом", но пробегая. мышь ставил меняла 233 на 0. Зато кот догонял мышь бешенно быстро и чтобы убежать, надо было моментально искать крайтчайший путь до выхода. Азарт был, у меня даже исходники где-то валялись, но переписать ее на Дельфи нет времени, а теперь не запускается. так как делалась "под ту" архитектуру ДОС. |
#4
|
||||
|
||||
Цитата:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
||||
|
||||
Да очень просто, видимо я не внятно написал.
Приоритетным было направление в ту сторону, где мышь. Грубо говоря, так. Попытаться сдвинуть ВЕКТОР в сторону мыши Далее анализ ЕСЛИ Пусто ТО идти по вектору - условно говоря вперед. (то есть 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. |
#6
|
||||
|
||||
У вас, на мой взгляд все достаточно продумано, но несколько нелогично. У вас супер-кот какой-то получился, сквозь преграды видит. Я думаю надо обоим животинам изначально задавать произвольный вектор движения. Для мыши вдоль стеночки, для кота более свободно, а вот когда кот наткнется на след мыши, тогда у него уже появится достаточно четкое указание куда направлятся. Но тут как-раз и возникает вопрос куда коту двигаться по следу, от мыши или к ней. Я думаю, что надо ввести счетчик для каждой ячейки которую пересекла мышь, который будет убывать со временем до нуля. Это и будет показатель свежести следа. Тогда интересная картинка получится, когда кот при выборе неверного направления, резко метнется назад.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
||||
|
||||
Если сильно постараться можно найти исходники - но переделывать бушь сам.
|
#8
|
|||
|
|||
Вообще не могу понять как делать эту прогу
Последний раз редактировалось WhiteKing, 14.12.2009 в 14:25. |
#9
|
||||
|
||||
Приехали....
Вам же уже даже примеры скинули? В чем затык-то? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#10
|
||||
|
||||
Начни с начала...)))
1. Нарисуй поле действия мыши и кота... 2. Используя алгоритм обхода препятствий заставь точку, в будущем мышь добраться до своей норки... 3. Добавь кота, другую точку, который призвольно шатается по территории... Далее как все реализуешь, можно учить кота ловить мышь, а мышь убегать от...кота...некоторая реализация ИИ... Пиши в личку или стучи в асю 431345720 подумаем вместе, задача интересная... В начале был Бит, потом Байт и только потом появилось Слово... |
#11
|
||||
|
||||
Раз задача мыши - быстрее добраться до выхода, то это задача на поиск кратчайшего пути, то есть поле можно представить графом и путь мыши искать по алгоритму Дейкстры. Препятствия означают отсутствие вершины графа. Логика кота будет сложнее и обсчитываться на каждом шаге мыши. Причем препятствия могут быть непроходимыми для мыши, но проходимыми для кота (например, валяется какой-нибудь тапок - кот легко перепрыгнет). Идею можно развивать хоть до бесконечности, но надо начать с простого: мышь выбирает кратчайший путь до выхода, а кот выбирает кратчайший путь до мыши на каждом шаге мыши. А потом развивать, изменять, писать ИИ и т.д.
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت |
#12
|
||||
|
||||
Не думаю, что это задача на поиск кратчайшего пути. Как я уже говорил ранее, мышь не ходит по открытому участку т.е. мышь будет всегда стараться двигаться вдоль стенки, а это далеко не всегда кратчайший путь.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#13
|
|||
|
|||
Спасибо за советыа.
Последний раз редактировалось WhiteKing, 14.12.2009 в 14:25. |