- PVSM.RU - https://www.pvsm.ru -

Делаем бота для дракончика в Google Chrome

Здравствуйте, не так давно загорелся желанием побить рекорд в мини-игре браузера Google Chrome. Если кто не знает, то при отсутствии доступа в интернет и при использовании выше упомянотого браузера, появляется мини-игра для запуска которой необходимо просто нажать клавишу пробел или в случае с мобильными телефонами, тапнуть по экрану.

image


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

image

Начнем с того, что найдем нужный пиксель. В моем случае этот пиксель находится на координатах «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

Источник [1]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/c-2/257588

Ссылки в тексте:

[1] Источник: https://habrahabr.ru/post/330672/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best