LINUX.ORG.RU

А давайте придумаем алгоритм?


0

1

Или может даже велосипед =)

Вобщем, от нефиг делать вспомнил я тут про старую добрую игрушку - Shadowrun. Она работает под эмулятором Sega.

Внешне она выглядит примерно вот так: http://gamesdbase.com/Media/SYSTEM/Sega_Genesis/Snap/Thumb/Thumb_Shadowrun_-_...
http://4pda.info/uploads/posts/2008-12/1230397688_shadowrun_4_resize.png

В игре есть несколько городов, корпоративных зданий(шо лабиринты), какая-то деревушка, в которой черт ногу сломит. Так вот задумал я сделать карту этой игры, чтобы можно было открыть большой и толстый PNG и заценить что где есть.

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

Из эмулятора можно захватывать картинку через библиотеку xorg и проверять - если изображение в этом окошке поменялось - то найти разницу и долепить ее в файл.

Только вот пока не пришел в голову алгоритм долепливания карты, решил отписать все это добро на великий разум лора =)

★★★★★

По картинке - вряд ли. Слишком накладно и геморойно. Вот если отследить позицию игрока, то тут думаю варианты есть.

Booster ★★
()
Ответ на: комментарий от kiverattes

Мышление одно - реализация другое )

Siado ★★★★★
() автор топика
Ответ на: комментарий от xorik

Ну скорее всего так и делают. Либо вручную отфотывают

Siado ★★★★★
() автор топика
Ответ на: комментарий от Booster

>Слишком накладно и геморойно.

Ну не знаю, скин весит не больше 20кб на эту маленькую игрушку, обновлятсья раз в 2 сек, сегодняшним компам просчитать все это добро будет не сложно.

А насчет отслеживания - это как? В принципе можно, но тоже через сравнение картинок, иначе сам ROM переписывать )

Siado ★★★★★
() автор топика
Ответ на: комментарий от Siado

>Ну не знаю, скин весит не больше 20кб на эту маленькую игрушку, обновлятсья раз в 2 сек, сегодняшним компам просчитать все это добро будет не сложно.

А как определить в какую сторону картинка сместилась? Это же надо какие-то алгоритмы выдумывать. А если мы знаем смещение или позицию игрока, то алгоритм упрощается. А вообще наверно проще найти карту в роме.

Booster ★★
()
Ответ на: комментарий от Booster

Ну вот смотри, есть скрин. Персонаж отходит к правому краю экрана, карта следит за ним. Если сделать скрин сечас - то этот скрин будет содержать половину предыдущего.

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

Вот как это сравнить бы.

Siado ★★★★★
() автор топика

Посчитать корреляционную матрицу двух изображений - тогда можно будет определить примерное смещение(точно вряд ли получится из-за движения перстонажей).

kulti ★★
()
Ответ на: комментарий от Siado

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

А вообще, можно же и этими неточными смещениями пользоваться, а потом просто все усреднить.

kulti ★★
()

Первое же, что пришло в голову:
0. Пусть размер скриншотов - 640х480.
1. Выбираем размер плавающего окна. Скажем, 16х16.
2. Существует (640-16)*(480-16) возможных расположений окна внутри скриншота. Каждому расположению соответствует двумерное смещение центра окна относительно центра скриншота.
3. Пробегаем окном по первому скриншоту с шагом в 1 пиксель и строим индекс: хеш-таблицу (std::tr1::unordered_multimap), где в качестве ключа выступает набор попавших в окно пикселей (можно просто сконкатенировать их в одну строку), а в качестве значения - смещение окна.
4. Пробегаем окном по второму скриншоту с шагом в 16 пикселей и строим рейтинг смещений. А именно, перед началом шага 4 все смещения получают рейтинг 0. Подставляем окно со второго скриншота в построенный на предыдущем шаге индекс, и рейтинг всех найденных в индексе смещений увеличиваем на 1.
5. Смещение с самым большим рейтингом - это и есть наиболее вероятное смещение второго скриншота относительно первого.

Manhunt ★★★★★
()
Ответ на: комментарий от Siado

>Покажи.

С удовольствием бы, но что-то не нашел. :( В общем, суть такова: делалась запись видео прохождения игры и хождения по всем локациям. Затем, брали тайлы, с помощью хитрой софтины генерировалась матрица карты, путем нахождения тайлов на видео. Потом это вручную корректировалось. Как-то так.

drakmail ★★★★
()
Ответ на: комментарий от baverman

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

Siado ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.