Wykrywanie kształtu C++

Wykrywanie kształtu C++
AK
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:5
0

Witam, próbuję stworzyć prostego bota do gry. Obecnie jest on w stanie klikać konkretne miejsca na ekranie w zależności od tego co się dzieje. Chciałbym dodać możliwość poruszania się jednostki w grze za pomocą WASD do konkretnego miejsca. W zależności od położenia respa trasa będzie wyglądać inaczej. W grze jest minimapa i pomyślałem, że na jej podstawie program będzie wyznaczał drogę. Moja jednostka jest zaznaczona inaczej niż reszta (wygląda jak kursor myszy) i na tej podstawie myślę, że mogę poznać punkt startowy. Kierunek kursora odpowiada kierunkowi ustawienia jednostki względem mapy, więc tak naprawdę potrzebuje znaleźć na ekranie czubek kursora.
title
Problem w tym, że nie wiem jak zrobić żeby program wiedział że jednostka znajduje się w miejscu o współrzędnych ekranu (x,y). Myślałem żeby identyfikować to po kolorze, ale nie mam pewności że dokładnie ten sam kolor nie występuje gdzieś jeszcze na minimapie + nie jest on zawsze identyczny. Sprawdzałem ColorPickerem i niestety mimo że wygląda na kolor biały to nie jest to zawsze dokładnie ten sam odcień.
Ma ktoś pomysł jak mógłbym rozwiązać ten problem? Da się sprawdzać jakoś zakres kolorów, żeby program np. stwierdził że w tym miejscu jest po prostu kolor biały nie biorąc pod uwagę konkretnego odcienia? Czytałem dosyć sporo o OCR czy tego typu rzeczach, aby wykrywać obiekty a nie działać na kolorach, ale nie wiem jak to zastosować w moim programie i wydaję mi się to na obecny stan mojej wiedzy bardzo skomplikowane.
Za każdą radę będę bardzo wdzięczny.

edytowany 1x, ostatnio: akinet
plx211
  • Rejestracja:ponad 11 lat
  • Ostatnio:3 miesiące
  • Postów:181
2

Zastanowił bym się czy nie lepiej czytać po pamięci gry w celu ustalenia współrzędnych <X, Y>.
Jeśli naprawdę mocno chcesz analizować obraz zainteresował bym się na twoim miejscu OpenCV, ale prawdopodobnie będzie to wolne i nie uzyskasz w ten sposób dokładnych koordynatorów.

Zobacz pozostały 1 komentarz
plx211
W końcu bot to w swój sposób cheat :)
AK
zdaje sobie z tego sprawę, ale w jeżeli da się to łatwo wykryć to raczej ta opcja odpada. Poczytam o tym OpenCV. A da się w c++ zrobić coś takiego że po wykryciu koloru w rgb przypisze mu ogólny kolor np. biały gdy nie będzie on idealnie biały tylko z jakimś odcieniem?
kq
Może, ale ponieważ bardzo dużo programów ładuje swoje biblioteki do innych (chociażby antywirusy), to twórcy antycheatów raczej muszą polegać blacklistach niż na czymkolwiek innym. Jeśli program nie będzie modyfikował pamięci gry i nie będzie dostępny publicznie, to mała jest szansa na jego wykrycie.
plx211
@akinet: W sumie nie wiem czy nie powinniśmy pisać w wątku a nie w komentarzach, ale możesz napisać sobie kod który dodatkowo by brał próg błędu przy porównaniu kolorów zamiast dokładnych wartości, ale o tym będziesz musiał sobie sam mocniej poszukać https://en.wikipedia.org/wiki/Color_difference
JV
Jak obraz z karty będzie analizowany na innym komputerze albo jakimś FPGA to takie coś będzie niewykrywalne.
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:minuta
1

A sama gra nie wspiera Lua lub czegoś analogicznego?


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.