Здравствуйте, не так давно загорелся желанием побить рекорд в мини-игре браузера Google Chrome. Если кто не знает, то при отсутствии доступа в интернет и при использовании выше упомянотого браузера, появляется мини-игра для запуска которой необходимо просто нажать клавишу пробел или в случае с мобильными телефонами, тапнуть по экрану.
Давайте приступим к его созданию. Принцип действия бота таков, мы парсим цвет пикселя на определенном расстоянии от персонажа в цикле и проверяем, если цвет пикселя равен цвету кактуса, то прыгаем иначе ни чего не делаем.
Начнем с того, что найдем нужный пиксель. В моем случае этот пиксель находится на координатах «775x250». Нужный пиксель я беру на 1 выше самого высокого бугорка на дороге и на расстоянии от персонажа выведенного методом проб и ошибок. Также следует заметить, что у меня разрешение экрана 1920х1080 21.5" и если у вас другое, то скорее всего будет работать криво.
Создадим консольное приложение в VS.
Для начала объявим переменные для координат пикселя.
public static int x = 775;
public static int y = 250;
Затем подключим DLL для работы.
[DllImport("user32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("user32.dll")]
public static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);
[DllImport("gdi32.dll")]
public static extern uint GetPixel(IntPtr hDC, int x, int y);
Далее все еще проще, добавляем код для самого обработчика
IntPtr hDC = GetDC(IntPtr.Zero);
while (true)
{
uint pixel = GetPixel(hDC, x, y);
if (pixel == 5460819)
{
SendKeys.SendWait("{UP}");
}
}
Код взят в бесконечный цикл.
if (pixel == 5460819)
Данная строчка означает, что когда цвет пикселя равен цвету кактуса в кодировке Decimal, то происходит нажтие стрелки вверх.
SendKeys.SendWait("{UP}");
Так же нужно подключить 2 ссылки.
using System.Diagnostics;
using System.Windows.Forms;
На данный момент дракончик с легкостью преодолевает 500 игровых метров, а дальше его подстерегает неожиданность ввиде птиц и ночи. Для решения этих проблем я напишу следующую статью. Удачи!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Windows.Forms;
namespace DragonChrome
{
class Program
{
#region VAR
public static int x = 775;
public static int y = 250;
#endregion
#region DLL
[DllImport("user32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("user32.dll")]
public static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);
[DllImport("gdi32.dll")]
public static extern uint GetPixel(IntPtr hDC, int x, int y);
#endregion
static void Main(string[] args)
{
IntPtr hDC = GetDC(IntPtr.Zero);
while (true)
{
uint pixel = GetPixel(hDC, Convert.ToInt32(x), y);
if (pixel == 5460819)
{
SendKeys.SendWait("{UP}");
}
}
}
}
}
Автор: Alexandr