Wyszukiwanie piksela danego koloru

0

Witajcie, chciałbym poćwiczyć i trochę zagłębić swoją wiedzę dotyczącą programowania na czymś prostym. Wymyśliłem więc, że zrobię prostego bota, który będzie 'sam grał w gry' (minigierki), które polegają na kliknięciu w dany kolor (kryształ, kulka) w celu ich zniszczenia (przykład: Diamond Dash, Bling Bloxxx). Wiem że coś takiego już istnieje i pewnie jest łatwo dostępne ale chciałbym zrobić to własnoręcznie.

Ostatnio próbowałem zrobić to za pomocą różnych macro tool'i typu macro recorder, pulover's macro creator, czy actool, ale jest tam za dużo klikania (przez co niewygodne) i sporo czasu zajmuje napisanie najprostrzego skryptu.

Wymyśliłem następujący sposób działania:
należałoby zrobić z okienka gry siatkę, wielkości owych kuleczek czy diamentów, powiedzmy 10x10 pól, 100x100 pikseli każde, współrzędne, powiedzmy 1x1 to kwadracik 100x100 pikseli od lewego górnego rogu, 2x1 to kolejne 100 pikseli w prawo itd.

Program miałby przeszukać pole 1x1 w poszukiwaniu piksela w kolorze np niebieskim, jeśli znajdzie powinien przypisać zmiennej wartość 1 po czym przejść do kolejnego pola i powtórzyć akcje. Po znalezieniu trzech klocków ( licznik=3) powinien ustawić kursor w miejscu ostatniego znalezionego klocka i kliknąć, po czym zacząć poszukiwania od nowa zerując licznik. Gdyby nie znalazł danego koloru w pierwszym klocku powinien poszukać innego i zwiększyć licznik odpowiadający innemu kolorowi. Oczywiście liczników powinno być więcej z racji tego że jest więcej kolorów.

Czy mój sposób rozumowania ma sens, czy robię to wszystko dookoła?
Jestem początkujący i pracuje prawie wyłącznie w delphi, stąd też pytanie czy w delphi dam radę zrobić coś podobnego.
Proszę o jakąś radę, ewentualnie konstruktywną krytykę :)

2

Ja bym to zrobil tak:

  1. Mapujesz cała planszę do tablicy 2D, każda komórka tablicy to obiekt zawierający info o kolorze i flagę czy już sprawdzono.
  2. Przelatujesz tablicę dwoma forami, po X i po Y uwzględniając tylko komórki nie sprawdzone.
    2a. Podczas przelatywania tablicy analizujemy pojedynczą komórkę: Sprawdzamy jakich ma sąsiadów, czy jacyś sąsiedzi są tego samego koloru i nie sprawdzone, jeśli tak, to w ramach tej iteracy rekurencyjnie przechodzimy na te pola jednocześnie oznaczając je jako sprawdzone. W ten sposób wykrywamy cały obszar będący w jednym kolorze. Jak wszystkie pola w ramach pojedynczego obszaru będą oznaczone jako sprawdzone (podczas sprawdzania zliczamy ilośc komórek) wrzucamy na listę współrzędne któregokolwiek pola (Jeśli obszar jest >=3 komórki). I przechodzimy do kolejnej nie sparwdzonej komórki.
  3. Po przeskanowaniu całej tablicy mamy zapełnioną liste z wykrytymi obszarami które mozna "zbic". Tutaj można wyszukać największy obszar, mamy współrzędne jednej z jego komórek -> klikamy w nią.
    3a. Lista obszarów jest pusta -> GAME OVER
  4. Wracamy do 1.
0

Dzięki za odpowiedź, twój sposób wydaje się być bardziej sensowny, możesz mi podpowiedzieć jak za pomocą delphi zmapować wycinek ekranu do tablicy?

0

Poszukaj jak sprawdzić kolor piksela z ekranu.

 var
myColor:TColor;
Pxl:TBitmap;

procedure TMainForm.FormCreate(Sender: TObject);
begin
Pxl:=TBitmap.Create;
Pxl.Width:=1;
Pxl.Height:=1;
BitBlt(Pxl.Canvas.Handle,0,0,1,1,GetDC(0),myXcoord ,myYcoord,SRCCOPY);
myColor:=Pxl.Canvas.Pixels[0,0];
ReleaseDC(0);
end;

Musisz przelecieć po współrzędnych co dx i dy tak żeby w każdej komórce trafić w tą samą współrzedną lokalną, żeby kolory się pokryły.. do tego możesz dać jakaś tolerancje dla odcieni

1 użytkowników online, w tym zalogowanych: 0, gości: 1