Hogyan írjunk egy bot játszani directx
Szóval, van egy szabványos DirectX-játék fut az ablakban. Mire van szükségünk? Elismerik, hogy mi jelenik meg a képernyőn, és küldje vissza nyomja meg a megfelelő gombokat. mi lesz az elismerés / azonosítási használni a könyvtárat OpenCV (Open Source Computer Vision Library) - ru.wikipedia.org/wiki/OpenCV
Először meg kell találni egy ablak a mi DirectX-alkalmazások és sdampit képernyőn. Majd kösse egy időzítő, és továbbra is, hogy minden XX másodperc. A legegyszerűbb lehetőség:
De ha nem akar összpontosítani, hogy ablak került át néhány másodpercenként, és a számítógép is biztonságosan működik (főleg ha van két monitor), akkor sokkal jobb munkát nehezebb -, hogy teljes kiírása, a látható tér, és ott kell keresni belépő a fő alkalmazás ikonjára (a száz bal oldalán a cím az ablak) alkalmazásával cvMatchTemplate () és cvMinMaxLoc () kiszámításához a kívánt pozícióba és a kivágott területet a kép megváltoztatása nélkül az ablak fókuszt.
Most kell, hogy meghatározzák, milyen állapotban / párbeszéd a játék vagyunk. Hogyan kell csinálni? Először azt kell meghatározni, hogy melyik terület a képernyőn a tárgy jelenléte / hiánya, amely tudunk ragaszkodni. Például, ha azt látjuk, a képernyőn egy gombot (bekarikázva piros a képen), az azt jelenti, hogy mi vagyunk a pohár IPC mód, ahol meg kell nyomnia az „Enter” gombot, hogy elindítsa a következő mérkőzést.
Ami ezután következik, már nagy és fárasztó munkát „készül az alap” - meg kell, hogy screenshotok a különböző játék helyzetekben felvenni a koordinátáit objektum határokat összehasonlítani a képernyő terület, a „százalékos hasonlóság”, amely lehet tekinteni, mint a küszöbérték (sok menük nem statikus, hogy a 100- százalékos mérkőzés nem lesz), és a továbbiakban bármilyen emulációs kulcsokat kell átadni.
bool ImgEq (dupla százalék, char * fájlnév, int x1, int y1, int x2, int y2)
Form1-> ImageEnView2-> hozzárendelése (Form1-> ImageEnViewPES);
Form1-> ImageEnView2-> so-> Crop (x1-5, y1-5, x2-5, y2-5);
Form1-> ImageEnView1-> IO-> LoadFromFile (fájlnév);
Form1-> ImageEnView1-> so-> Crop (x1, y1, x2, y2);
kettős dPER = Form1-> ImageEnView1-> so-> CompareWith (Form1-> ImageEnView2-> IEBitmap, NULL);
visszatérési (dper> = százalék);
>
Calling ez a funkció a következő:
ha (ImgEq (0,98, "csésze-menu.bmp", 350.700.520.870)) <…>
Rendben! Most a program képes meghatározni az aktuális üzemmód, amelyben a játékban. Továbbra is csak tanulni, hogyan kell átadni a kívánt billentyűkombinációt. Mivel meg kell csinálni a vetélkedés a DirectX alkalmazás PostMessage / kbdevent itt nem fog működni, meg kell átvinni scancodes segítségével SendInput (). Annak érdekében, hogy képes legyen szépen leírja a hívást, nyomja meg a szekvencia típus Key (DIKEYBOARD_X), csináltam egy ilyen funkció:
Ha már régóta gondolkodtam, hogy írjon egy bot a kedvenc játékok, de nem minden, nem éri el a kezét - próbáld ki, ez elég kreatív folyamat, ami függőséget okoz.