Форум по 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, 16:48
Аватар для GrenLES
GrenLES GrenLES вне форума
Новичок
 
Регистрация: 12.05.2009
Сообщения: 51
Репутация: 13
По умолчанию

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

Цитата:
Сообщение от GrenLES
...
Зато кот догонял мышь бешенно быстро и чтобы убежать, надо было моментально искать крайтчайший путь до выхода....
А как у тебя кот принимал решение в какую сторону за мышой бежать? Ведь оба направления при таком подходе идентичны.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 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.
Ответить с цитированием
  #7  
Старый 21.09.2009, 22:30
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

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

ну тут все в руках создателя и его фантазии на усложнение логики поведения.

У меня это был курсовой проект. Поэтому особых изысков не было.
Ответить с цитированием
  #9  
Старый 21.09.2009, 23:36
Аватар для GrenLES
GrenLES GrenLES вне форума
Новичок
 
Регистрация: 12.05.2009
Сообщения: 51
Репутация: 13
По умолчанию

Цитата:
Сообщение от Страдалецъ
Я думаю, что надо ввести счетчик для каждой ячейки которую пересекла мышь, который будет убывать со временем до нуля. Это и будет показатель свежести следа. Тогда интересная картинка получится, когда кот при выборе неверного направления, резко метнется назад.

А вот это мне понравилось. Даже захотелось поднять старые коды и приспособить игры для Дельфи в винде....

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

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

На самом деле все не так очевидно, ведь мышь может несколько раз пересечь собственный след и тогда за котом вообще прикольно будет наблюдать.
В общем, чем дальше тем все интереснее становится. Уже начал сам подумывать о красивой реализации, дело пока только за набором спрайтов мыши и кота. Не хочется статичные картинки двигать.
А автору могу предложить такие картинки:
Изображения
Тип файла: png Kitten.png (1.8 Кбайт, 27 просмотров)
Тип файла: png Mouse.png (1.9 Кбайт, 22 просмотров)
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 22.09.2009 в 00:11.
Ответить с цитированием
  #12  
Старый 22.09.2009, 07:56
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Я маленько не догнал условие задачи. То ли кот знает где находится мышь в каждый момент времени то ли нет...
Я бы решал так: из лабиринта строим граф и обходим его в ширину. Как только видим мышь, то есть кот и мышь находятся в соседних вершинах, кот бросает предыдущие задание и бежит за мышью, как только мышь пропадает из поля зрения, кот опять начинает обход.
Ответить с цитированием
  #13  
Старый 22.09.2009, 11:31
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

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

Страдалецъ
Интересные картинки.

Последний раз редактировалось WhiteKing, 14.12.2009 в 14:24.
Ответить с цитированием
  #15  
Старый 22.09.2009, 19:06
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

За исходниками добро пожаловать в гугл. А здесь выкладывают наработки. Давай что есть, или вопросы что не получается
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter