Подтвердить что ты не робот

Создание флеш-игры

Есть ли у кого-нибудь рекомендации по ресурсам или методам создания бота в java, который может играть в флеш-игру?

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

4b9b3361

Ответ 1

Я только что создал случайную карточку, играющую в бот (а не в покер) примерно через 3 дня, и это было совершенно легко. Метод ниже будет работать для большинства игр на основе кнопок. Конечно, для 3D-игр и быстрой движущейся 2D-графики вам понадобится другой подход.

Странно, что там так мало полезной информации. Все статьи о написании ботов будут связаны с материалами Windows с DLL, перехватами, отслеживанием памяти и всеми другими трюками. И, конечно же, вам не нужна такая глупость. Все, что вам нужно, это Java и awt.Robot.

Испускающие клики достаточно просты, логика игры - это то, что вам нужно выяснить самостоятельно, поэтому я сосредоточусь на получении ввода с экрана.

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

Flash выполняет визуализацию векторных шрифтов и не создает идеальную согласованность пикселей между различными экземплярами игры. Также масштабирование изображения не будет согласованным. Вот способы борьбы с этим:

  • Фильтрация. Вы можете использовать многие методы фильтрации, самым простым из которых является пороговый фильтр. Просто сделайте все пиксели 100% черными, если интенсивность меньше, чем ваш порог, или 100% белый в противном случае. Затем выполните сравнение по пикселям по отфильтрованным изображениям и найдите количество отдельных пикселей. Предположим, что для низких значений разных пикселей. Вам также может потребоваться сдвинуть изображения на + или - 1 пиксель в каждом направлении, в общей сложности 3 * 3 = 9 сравнений. Просто выберите наименьшее значение отдельного пикселя в результате.
  • Средний цвет. Если вы просто смотрите, есть ли индикатор (например, зеленый светящийся круг) на экране или нет, просто найдите средний цвет в прямоугольнике, где находится индикатор, и посмотрите, достаточно ли он близок к среднему цвету сохраненного изображения.

Распознавание шрифтов может быть сложным. Если вы можете отделить буквы (обычно с монохромными шрифтами), вы можете просто использовать метод фильтрации выше, чтобы распознать каждую букву индивидуально.

Если вы нажмете на стену, вы можете попробовать множество более сложных методов фильтрации (размытие + интенсивность порога - хорошая комбинация).

Конечные советы:

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

Ответ 2

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

Я также рекомендую посмотреть AutoIt. С его помощью вы можете легко выполнять script повторяющиеся действия, а также извлекать текст и пиксельные данные с экрана. Я использовал его для script Elements, Dream World и нескольких других игр. Скажите мне, в какую игру вы стреляете, и я могу помочь вам больше.

Ответ 3

Вы можете изменить флеш-приложение и предоставить простой api для браузера (Javascript и, возможно, Java-апплет). Api будет содержать методы контроля и доступ к состоянию игры. ExternalInterface.addCallback сделает это возможным.

Ответ 4

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

Кроме того, Java, как правило, раздувается, и есть много функций ООП, которые не нужны для очень простой программы. Я согласен с предложением Garrett Hall использовать AutoIt для чтения игры и ввода ввода в компьютер. Конечно, есть больше, чем игра боттинг, но AutoIt может сделать большую часть того, что вам нужно написать бот-флеш-игры.