Pull to refresh

Полуавтоматический бот для игры «Веселая ферма»

Reading time 3 min
Views 11K
Добрый вечер читатели хабра! Недавно один человек показал макрос-бота для браузерной игры Diamond Dash, пост. А делал он все при помощи языка макросов AutoIt. И я вспомнил, что для разработки полуавтоматического бота на C# использовал библиотеку AutoIt.
Как я разрабатывал, смотрите ниже…

Необходимые средства для работы


  • Сам VisualStudio 2010
  • Навыки C#
  • И библиотека AutoIt

Первым делом я скачал сам AutoIt (AutoIt Full Installation) и установил. Потом в VisualStudio добавил библиотеку. Не знаю почему но у меня не получилось использовать библиотеку без установки exe файла.

Начало работы


Суть моей программы заключалась в том что нужно выбрать прямоугольник и потом при помощи горячих клавиш указать его положение, а также указать сколько в нем полей.
Например:
image
  • Положение прямоугольника задается точками 1.1, 1.n, n.1.
  • Высота 4
  • Ширина 3


Горячие клавиши:

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

Код моих горячих клавиш:

HotKey[] Key = new HotKey[4];
Key[1] = new HotKey();
Key[2] = new HotKey();
Key[3] = new HotKey();
Key[1].KeyModifier = HotKey.KeyModifiers.Shift;
Key[1].Key = Keys.Q;
Key[1].HotKeyPressed += new KeyEventHandler(position1);
Key[2].KeyModifier = HotKey.KeyModifiers.Shift;
Key[2].Key = Keys.W;
Key[2].HotKeyPressed += new KeyEventHandler(position2);
Key[3].KeyModifier = HotKey.KeyModifiers.Shift;
Key[3].Key = Keys.E;
Key[3].HotKeyPressed += new KeyEventHandler(position3);


Получаем 3 горячих клавиши: Shift+Q, Shift+W, Shift+E, которые выполняют события position1, position2 и position3.
Можно использовать не только Shift но и Ctrl, Alt, Win или ничего.

Вычисление точек для «клика»:

Передаем программе положения для вычисления сетки по которым нужно совершать клики.

Код вычисления:

private void button1_Click(object sender, EventArgs e)
{
int shirina = Convert.ToInt32(textBox4.Text);
int Vnax, Vnay, Vx, Vy, Nx, Ny;
Vx = Convert.ToInt32(textBox1.Text);
Vy = Convert.ToInt32(textBox2.Text);
Nx = Convert.ToInt32(textBox3.Text);
Ny = Convert.ToInt32(textBox6.Text);
Vnax = (Convert.ToInt32(textBox7.Text) - Convert.ToInt32(textBox1.Text)) / (shirina - 1);
Vnay = (Convert.ToInt32(textBox2.Text) - Convert.ToInt32(textBox8.Text)) / (shirina - 1);
for (int i = 1; i <= shirina; i++)
{
Shag(Vx, Vy, Nx, Ny);
Vx += Vnax;
Vy -= Vnay;
Nx += Vnax;
Ny -= Vnay;
}
}
private void Shag(int Vx, int Vy, int Nx, int Ny)
{
int vysota = Convert.ToInt32(textBox5.Text);
int nax, nay, x, y;
int nS = 4;
int nCout = 1;
String Str = "left";
nax = (Nx - Vx) / (vysota - 1);
nay = (Ny - Vy) / (vysota - 1);
x = Vx;
y = Vy;
for (int i = 1; i <= vysota; i++)
{
autoIt.MouseClick(Str, x, y, nCout, nS);
x += nax;
y += nay;
}

Параметры:

  • Vx, Vy верхнее положение точки
  • Nx, Ny нижнее положение точки


И самое интересное в методе Shag, в котором мы вызываем метод из библиотеки АutoIt MouseClick его параметры:

  • x, y — положение точки для клики
  • nS — скорость перемещения курсора от одной точки к другой
  • nCout — количество кликов
  • Str — какой кнопкой кликать, правой или левой


Ну вот и все основное я вам показал. Исходники моей программы: Скачать.

Небольшое видео приложения:



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


PS: Выражаю благодарность своей маме, которая меня однажды попросила придумать как можно тратить меньше времени на приложения «Веселая ферма», но так как она ни в какую не могла отказаться, я написал данную программу. Сначала мне пришлось немного обучить ее в использовании программы, но теперь она счастлива.

Всем спасибо.
Tags:
Hubs:
+20
Comments 22
Comments Comments 22

Articles