воскресенье, 10 февраля 2013 г.

рисунки с глазами что они обозначают

Получив снимок экрана, неплохо было бы перевести его в ARGB-массив:

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

отсеять ненужные вхождения;

подсчитать количество вхождений белых точек по горизонтали и по вертикали;

при необходимости инвертировать его, чтобы значимые точки были белыми, а фон чёрным;

бинаризировать изображение;

А что же дальше? А дальше было множество попыток заставить программу находить положение игрового поля, десятки тысяч обращений к методу getRGB класса BufferedImage, попытки узнать позицию игрового поля по шаблону и т.д. Все эти результаты были безуспешны. То что работало для одной игры, не работало для другой. И вот однажды, в голову ко мне влетел такой вот план:

Первым делом нужно было как-то узнать положение игрового поля на экране. Но сначала не помешало бы получить снимок экрана. Для этого мне понадобился класс java.awt.Robot, с его методом: BufferedImage createScreenCapture(Rectangle screenRect).

Распознавание игрового поля и его параметров

автоматизировать процесс игры.

отыскать положение кнопок заливки по каждому цвету;

найти оптимальную последовательность вариантов заливки;

получить данные о цветах ячеек в игре;

распознать игровое поле и его параметры;

Анализировать я начал с конца, представив, что у меня на руках уже есть работающая программа, нажимающая нужные кнопки в нужной последовательности. Чтобы она умела это делать, ей нужно знать координаты этих кнопок, не будет же она тыкать в любое место на экране, в надежде на то, что хоть раз попадёт? Далее, нужно предоставить последовательность, по которой бот будет нажимать кнопки, не будет же он тыкать любые кнопки, верно? Чтобы предоставить необходимую последовательность нажатий, нужно выбрать наиболее оптимальный алгоритм выбора цветов для заливки, а как это сделать не имея данных о состоянии поля? Правильно, никак! Поэтому нужно получить данные о цветах ячеек в игровом поле. Отлично, но возникает вопрос, а где же само игровое поле? Ответ «где-то на экране» не принимается, поэтому нужно будет найти и его. Вот теперь вроде всё, распишем план наших дальнейших действий:

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

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

Рисунок 1. Игровое поле.

Универсальный бот для игры Flood-It

Универсальный бот для игры Flood-It / Хабрахабр

Комментариев нет:

Отправить комментарий