Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 06.02.2013, 16:48   #1
 Разведчик
Аватар для Scrypto
 
Scrypto на правильном путиScrypto на правильном пути
Регистрация: 31.12.2012
Сообщений: 42
Популярность: 187
Сказал(а) спасибо: 17
Поблагодарили 15 раз(а) в 9 сообщениях
 
По умолчанию Создаем бота для приложений вконтакте и не только.

Простой бот для игры «Bejeweled Blitz» на C++ и Qt
В последнее время появилось много статей про написание ботов для flash игр. Хочу поделиться своим опытом написания бота для Google+ игры «Bejeweled Blitz».

Я не стал подменять ответы серверу или перехватывать функции flash. Как мне кажется, написание эмулятора игрока, а затем и наблюдение за игрой бота доставляет больше удовольствия.

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

Несмотря на то, что бот написан на мультиплатформенной библиотеке Qt, он содержит немного платформозависимого кода для Windows.


Полный исходный текст бота прилагается.

Немного про игру

Суть классической игры «Bejeweled» заключается в том, что на игровом поле 8x8 клеток в случайном порядке расположены кристаллы семи цветов разной формы.

[Ссылки могут видеть только зарегистрированные пользователи. ]

Задача игрока — менять местами соседние кристаллы таким образом, чтобы после перемещения получился ряд из трёх или более кристаллов одного цвета. Если ряд кристаллов не образуется, то перемещения не происходит.

Если образовался ряд из трёх (или более) кристаллов в результате действий игрока, либо
случайно при заполнении поля, то ряд одноцветных кристаллов исчезает, и на его место сверху высыпаются новые кристаллы.

В игре «Bejeweled Blitz» всё то же самое, только на игру отводится одна минута, за которую нужно набрать как можно больше очков.

В игре есть три вида бонусов: «огненные» кристаллы, «ледяные» кристаллы и «универсальные» кристаллы. Бонусы даются за выстраивание более трёх цветов в ряд или за выстраивания разных фигур из одного цвета не лежащих в одном ряду. Бонусы при срабатывании взрываются, либо другим способом уничтожают часть кристаллов на поле.

Также в игре есть несколько допущений, которые упрощают задачу боту:
  • за попытку неверного перемещения штрафные очки не начисляются
  • можно менять местами неподвижные кристаллы в то же время, когда сверху ещё падают новые
  • на время срабатывания бонуса таймер игры останавливается.

Определение окна с игрой

Используется способ «перетяни мышкой мишень на нужное окно»: для указания боту окна с игрой нужно нажать на мишень и, не отпуская кнопку мышки потянуть курсор в область окна с игрой, затем отпустить кнопку. Для удобства боту можно включить режим «Stay on top», чтобы окно оставалось всегда поверх остальных окон.
В процессе перемещения курсора мышки с мишенью в окне бота выводится название класса окна для контроля.

Вычисление положения игры в окне

Мне очень не хотелось прикручивать какую-либо библиотеку распознавания областей по картинке, поэтому я просто добавил в настройки возможность задать смещение игры относительно окна. При первом запуске бота придётся выполнить настройку смещений координат. Я постарался этот процесс немного облегчить, о чём можно прочитать ниже в разделе «Как запустить».

Перехват игрового поля

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

Небольшая проблема возникает с определением некоторых бонусных кристаллов и кристаллов в виде множителя очков. Дело в том, что в ресурсах игры изображения таких кристаллов не хранятся, а генерируются в runtime. Поэтому пришлось написать процедуру, которая по горячей клавише сохраняет на диск скриншот поля и перехваченные значения цвета. Затем ловить в процессе игры появление таких кристаллов и сбрасывать значения в файл. Ну и скриншот заодно, чтобы не забыть какие были кристаллы, и на каких местах расположены.

Хуже всего обстоит дело с анимированными бонусами, из-за чего сильно разрастается таблица соответствий типа кристалла цвету захваченного пиксела, потому что в идеале надо перечислить цвета из каждого кадра анимации. Охват не обязательно должен быть полным, рано или поздно цвет кадра совпадёт с тем, который есть в массиве, но лишние задержки ни к чему.
Я думал над решением этой проблемы, но пока более быстрого решения не придумал.

Реализация поиска правильных ходов

Поиск правильного хода реализован через паттерны (Шаблоны) положений.
Существует конечное число расположений кристаллов на поле – паттернов, а именно 16:

[Ссылки могут видеть только зарегистрированные пользователи. ]

Для каждого цвета кристаллов строится собственный список расположения на игровом поле, который передаётся классу Solver.
Solver последовательно перебирает все возможные варианты паттернов расположения по всем возможным координатам, в случае совпадения немедленно прекращает работу, при этом сохраняя две координаты ячеек с кристаллами, которые нужно менять.

Выполнение хода

Итак, Solver нам нашёл координаты для замены. Теперь нужно последовательно нажать на поле с этими координатами мышкой.
Координаты ячеек массива пересчитываются в экранные, затем, если включен режим «Auto play», дважды вызывается метод, который посылает окну с игрой сообщение о нажатии мышки сначала на одном, а затем на другом кристалле.
При этом окно с игрой не обязательно должно быть в фокусе. Мышка тоже не блокируется, поэтому для пущего удовольствия можно помогать боту, делая ходы собственноручно.
Если включен режим «Show helper», то на игровом поле будут показываться небольшие красные полоски между полями, которые соответствуют правильному ходу. Такая своеобразная подсказка человеку-игроку, какие кристаллы можно менять.

Что можно улучшить

Первое, что хочется сделать, это убрать необходимость подгонки координат, чтобы найти игру на экране. Наиболее простой способ — использовать WebKit часть библиотеки Qt. Мы получаем практически полный контроль над веб-страницей, знаем точное положение всех элементов. Останется только указать смещение для игрового поля внутри игры.
Автоматически мы получаем кроссплатформенность, так как не нужно будет эмулировать нажатия мышки и искать handle окна.

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

Из бота вполне можно сделать полностью автоматическую самоиграйку. Достаточно написать распознавание диалоговых окон игры, можно так же, как и кристаллы, по цветам точек в ключевых местах, затем «нажимать» мышкой на соответствующее нужной кнопке место.

Как запустить

Запустите бота и включите кнопку «Stay on top», чтобы окно бота было всегда видно. Затем запустите игру в браузере. Окно браузера я рекомендую распахнуть на весь экран, чтобы постоянно не подгонять смещения.
Когда игра загрузится, выключите флажок «Auto play» и включите флажок «Show» в области «Mini field». Далее перетяните мишень из строки «Window class», удерживая левую кнопку мышки, на окно с игрой и отпустите кнопку мышки. Нажмите кнопку «Start/stop», затем начните игру в браузере.
Установите необходимые значения смещения в строке «Game client offset» так, чтобы игровое поле целиком помещалось в окно предпросмотра бота. При правильных значениях смещений индикатор около значений смещений загорается зелёным.
Включите флажок «Auto play», при этом бот должен начать делать ходы.

Примерный вид правильной настройки изображён на скриншоте:

[Ссылки могут видеть только зарегистрированные пользователи. ]

Можно подгонять смещения и при включённом флажке «Auto play», тогда бот начнёт играть при совпадении координат автоматически.
Когда бот уверенно заиграет, можно выключить режим просмотра поля в боте, чтобы немного ускорить выполнение.
Включение и выключение бота повешено на глобальную горячую клавишу Alt+A. Флажок «Show helper» включает режим подсказки хода – красная линия между клетками.
В поле «Timeout (ms)» можно изменять время в миллисекундах между срабатываниями таймера (когда выключен режим автоматической игры). Эксперименты показали, что наилучшие результаты получаются в диапазоне 100-200 миллисекунд. Слишком маленькие значения увеличивают ложные срабатывания бота, когда кристаллы падают.
Протестировав бота на разных браузерах, которые у меня есть, я обнаружил странную особенность IE9: при правильной настройке смещений по зелёному индикатору бот не работает. Нужно уменьшить смещение X на единицу, тогда бот срабатывает правильно. С чем это связано я ещё не разобрался. Если у вас такое проявляется – настраивайте бот с включенным флажком «Auto play», не обращая внимания на показания индикатора.

Видео-демонстрация игры бота

[Ссылки могут видеть только зарегистрированные пользователи. ]

Информация о программе

Программа полностью автономна, не производит никакую запись в реестр.
Программа записывает свои настройки в текстовый файл «settings.conf» в папке, из которой была запущена, поэтому для правильной работы настроек требует наличия прав на запись в свою папку.

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

Автор не несёт никакой ответственности за возможный причинённый моральный или материальный ущерб.

Бот скомпилирован с библиотекой Qt 4.7.3 компилятором MinGW.

Скачать

Исходники: на [Ссылки могут видеть только зарегистрированные пользователи. ], в архиве: [Ссылки могут видеть только зарегистрированные пользователи. ].

компилированный бот для Windows (полный комплект): [Ссылки могут видеть только зарегистрированные пользователи. ].
Только exe: [Ссылки могут видеть только зарегистрированные пользователи. ].
Только библиотеки Qt4.7.3+MinGW Runtime: [Ссылки могут видеть только зарегистрированные пользователи. ].

Оригинал статьи [Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Glammm (06.02.2013), nybegblya (06.02.2013)
Старый 06.02.2013, 20:11   #2
 Разведчик
Аватар для nybegblya
 
nybegblya вызывает надежду
Регистрация: 28.04.2010
Сообщений: 19
Популярность: -15
Сказал(а) спасибо: 61
Поблагодарили 14 раз(а) в 10 сообщениях
Отправить сообщение для nybegblya с помощью Skype™
 
По умолчанию Re: Создаем бота для приложений вконтакте и не только.

видео 2011 года
  Ответить с цитированием
Старый 06.02.2013, 20:17   #3
 Разведчик
Аватар для Scrypto
 
Scrypto на правильном путиScrypto на правильном пути
Регистрация: 31.12.2012
Сообщений: 42
Популярность: 187
Сказал(а) спасибо: 17
Поблагодарили 15 раз(а) в 9 сообщениях
 
По умолчанию Re: Создаем бота для приложений вконтакте и не только.

Это не делает его менне актуальным! Прочитай пост и возможно ты поймешь это.
  Ответить с цитированием
Старый 06.02.2013, 20:19   #4
 Разведчик
Аватар для nybegblya
 
nybegblya вызывает надежду
Регистрация: 28.04.2010
Сообщений: 19
Популярность: -15
Сказал(а) спасибо: 61
Поблагодарили 14 раз(а) в 10 сообщениях
Отправить сообщение для nybegblya с помощью Skype™
 
По умолчанию Re: Создаем бота для приложений вконтакте и не только.

просто мне это показалось странным) а так я занят более важным делом, фармлю энергию в лесной тусе тоннами бесплатно)))
  Ответить с цитированием
Старый 06.02.2013, 23:07   #5
 Разведчик
Аватар для Scrypto
 
Scrypto на правильном путиScrypto на правильном пути
Регистрация: 31.12.2012
Сообщений: 42
Популярность: 187
Сказал(а) спасибо: 17
Поблагодарили 15 раз(а) в 9 сообщениях
 
По умолчанию Re: Создаем бота для приложений вконтакте и не только.

Не не респект ) Ссылка на автора под видео, если интересно, могу что нить подобное сделать.
  Ответить с цитированием
Старый 07.02.2013, 05:34   #6
 Разведчик
Аватар для obanaq
 
obanaq никому не известный тип
Регистрация: 05.07.2011
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Создаем бота для приложений вконтакте и не только.

Ну хоть нашел и не поленился выложить) Тоже не есть плохо.
  Ответить с цитированием
Старый 07.02.2013, 17:50   #7
Заблокирован
 Старший сержант
Аватар для FrozenRaven
 
FrozenRaven сломал счётчик популярности :(FrozenRaven сломал счётчик популярности :(FrozenRaven сломал счётчик популярности :(FrozenRaven сломал счётчик популярности :(FrozenRaven сломал счётчик популярности :(FrozenRaven сломал счётчик популярности :(FrozenRaven сломал счётчик популярности :(FrozenRaven сломал счётчик популярности :(FrozenRaven сломал счётчик популярности :(FrozenRaven сломал счётчик популярности :(FrozenRaven сломал счётчик популярности :(
Регистрация: 16.10.2011
Сообщений: 228
Популярность: 27616
Золото Zhyk.Ru: 15
Сказал(а) спасибо: 316
Поблагодарили 141 раз(а) в 116 сообщениях
 
По умолчанию Re: Создаем бота для приложений вконтакте и не только.

Scrypto, добавь вт хотя бы к exe файлу, а лучше ко всем на которые есть ссылка на скачивание в первом сообщении.
  Ответить с цитированием
Старый 07.02.2013, 19:36   #8
 Разведчик
Аватар для Scrypto
 
Scrypto на правильном путиScrypto на правильном пути
Регистрация: 31.12.2012
Сообщений: 42
Популярность: 187
Сказал(а) спасибо: 17
Поблагодарили 15 раз(а) в 9 сообщениях
 
По умолчанию Re: Создаем бота для приложений вконтакте и не только.

Если честно то лень ) Всвязи с тем, что есть исходный код то VT добавлять не обязательно IMHO
  Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Уязвимость] Взлом приложений только через Cheat Engine Qatro Баги игр ВКонтакте 65 18.06.2013 20:55
[Статья] Взлом игр ВКонтакте: исследование приложений ВКонтакте под микроскопом OneShot Баги игр ВКонтакте 13 03.02.2013 03:14
[Продам] ПРОДАЮ СТРАНИЦУ ВКОНТАКТЕ!ГОЛОСА ВКОНТАКТЕ ! и нычки в приложении тюряга 40tolay Социальные сети 8 17.10.2011 20:57
[Руководство] Кактусомания - создаем бота pahan35 Баги игр ВКонтакте 29 12.01.2011 20:26

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 20:48.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net