Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.09.2009, 15:31
WhiteKing WhiteKing вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 7
Репутация: 10
Радость 11

Здравствуйте

Последний раз редактировалось WhiteKing, 14.12.2009 в 14:23.
Ответить с цитированием
  #2  
Старый 21.09.2009, 16:27
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Самое сложное в этой задаче - это включить мозг у ваших зверюг. Т.е. при определении следующего хода зверюга должна помнить хотя-бы часть предыдущих и чем больше она будет помнить тем более короткий маршрут будет.
А разве мышка не должна убегать от кошки при встрече?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 21.09.2009, 16:46
Аватар для GrenLES
GrenLES GrenLES вне форума
Новичок
 
Регистрация: 12.05.2009
Сообщения: 51
Репутация: 13
По умолчанию

Я такое решал на первом курсе.

Первое, что приходит на ум - найди в сети алгоритм обхода препятствий.
Как раз твой случай - кот должен обойти препятствия и найти мышь.

Мое решение было таким

Кот стремился к мышке. Если впереди преграда - он идет в первый свободный проход, предпочитая, например сначала тыкнуться вправо. и так до поворота назад,
так он продолжает идти пока или слева или справа не кончится стена в сторону, где "координаты" мыши.
воткнувшись в тупит ставит "невидимые" метки и больше туда никогда не пойдет, если мышь их не снимет тем, что пройдет по ним.

В программе это грубо говоря выглядело кодом 233 - он ничего не значил и был также "полом", но пробегая. мышь ставил меняла 233 на 0.

Зато кот догонял мышь бешенно быстро и чтобы убежать, надо было моментально искать крайтчайший путь до выхода.

Азарт был, у меня даже исходники где-то валялись, но переписать ее на Дельфи нет времени, а теперь не запускается. так как делалась "под ту" архитектуру ДОС.
Ответить с цитированием
  #4  
Старый 21.09.2009, 17:25
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
Сообщение от GrenLES
...
Зато кот догонял мышь бешенно быстро и чтобы убежать, надо было моментально искать крайтчайший путь до выхода....
А как у тебя кот принимал решение в какую сторону за мышой бежать? Ведь оба направления при таком подходе идентичны.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 21.09.2009, 22:05
Аватар для GrenLES
GrenLES GrenLES вне форума
Новичок
 
Регистрация: 12.05.2009
Сообщения: 51
Репутация: 13
По умолчанию

Да очень просто, видимо я не внятно написал.

Приоритетным было направление в ту сторону, где мышь.
Грубо говоря, так.

Попытаться сдвинуть ВЕКТОР в сторону мыши
Далее анализ

ЕСЛИ Пусто ТО идти по вектору - условно говоря вперед. (то есть 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  
Старый 21.09.2009, 22:30
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

У вас, на мой взгляд все достаточно продумано, но несколько нелогично. У вас супер-кот какой-то получился, сквозь преграды видит. Я думаю надо обоим животинам изначально задавать произвольный вектор движения. Для мыши вдоль стеночки, для кота более свободно, а вот когда кот наткнется на след мыши, тогда у него уже появится достаточно четкое указание куда направлятся. Но тут как-раз и возникает вопрос куда коту двигаться по следу, от мыши или к ней. Я думаю, что надо ввести счетчик для каждой ячейки которую пересекла мышь, который будет убывать со временем до нуля. Это и будет показатель свежести следа. Тогда интересная картинка получится, когда кот при выборе неверного направления, резко метнется назад.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 21.09.2009, 16:48
Аватар для GrenLES
GrenLES GrenLES вне форума
Новичок
 
Регистрация: 12.05.2009
Сообщения: 51
Репутация: 13
По умолчанию

Если сильно постараться можно найти исходники - но переделывать бушь сам.
Ответить с цитированием
  #8  
Старый 26.10.2009, 10:58
WhiteKing WhiteKing вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 7
Репутация: 10
По умолчанию

Вообще не могу понять как делать эту прогу

Последний раз редактировалось WhiteKing, 14.12.2009 в 14:25.
Ответить с цитированием
  #9  
Старый 26.10.2009, 12:54
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Приехали....
Вам же уже даже примеры скинули? В чем затык-то?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 26.10.2009, 19:00
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Начни с начала...)))
1. Нарисуй поле действия мыши и кота...
2. Используя алгоритм обхода препятствий заставь точку, в будущем мышь добраться до своей норки...
3. Добавь кота, другую точку, который призвольно шатается по территории...
Далее как все реализуешь, можно учить кота ловить мышь, а мышь убегать от...кота...некоторая реализация ИИ...
Пиши в личку или стучи в асю 431345720 подумаем вместе, задача интересная...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #11  
Старый 26.10.2009, 19:51
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

Раз задача мыши - быстрее добраться до выхода, то это задача на поиск кратчайшего пути, то есть поле можно представить графом и путь мыши искать по алгоритму Дейкстры. Препятствия означают отсутствие вершины графа. Логика кота будет сложнее и обсчитываться на каждом шаге мыши. Причем препятствия могут быть непроходимыми для мыши, но проходимыми для кота (например, валяется какой-нибудь тапок - кот легко перепрыгнет). Идею можно развивать хоть до бесконечности, но надо начать с простого: мышь выбирает кратчайший путь до выхода, а кот выбирает кратчайший путь до мыши на каждом шаге мыши. А потом развивать, изменять, писать ИИ и т.д.
__________________
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت
Ответить с цитированием
  #12  
Старый 26.10.2009, 20:11
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Не думаю, что это задача на поиск кратчайшего пути. Как я уже говорил ранее, мышь не ходит по открытому участку т.е. мышь будет всегда стараться двигаться вдоль стенки, а это далеко не всегда кратчайший путь.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #13  
Старый 27.10.2009, 17:00
WhiteKing WhiteKing вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 7
Репутация: 10
По умолчанию

Спасибо за советыа.

Последний раз редактировалось WhiteKing, 14.12.2009 в 14:25.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:53.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter