Я пытаюсь сделать бота, который играет "Не касайтесь белой плитки".Код, который у меня до сих пор работает, работает отлично, но он немного медленный, и по мере ускорения игры бот перестает работать.
Сейчас я беру 4 изображения, используя PIL ImageGrab.grab()
:
image_r = ImageGrab.grab(bbox=(160, 500, 180, 900))
image_cr = ImageGrab.grab(bbox=(600, 500, 620, 900))
image_cl = ImageGrab.grab(bbox=(1020, 500, 1040, 900))
image_l = ImageGrab.grab(bbox=(1440, 500, 1460, 900))
image_r ⇒ правильное изображениеimage_cr ⇒ правое центральное изображениеimage_cl ⇒ левое центральное изображениеimage_l ⇒ левое изображение
Ниже вы можете увидеть игру с полями, обозначающими изображения (приблизительно)
![enter image description here](https://i.stack.imgur.com/5Olyn.png)
Затем для каждого я проверяю черныепикселей с:
def get_black_px(image,x):
for y in range(image.size[1]-5, 5, -10):
R , G, B = image.getpixel((x,y))
if R < 40 or G < 40 or B < 40:
R, G, B = image.getpixel((x, y+2)) #this is done since the lines
if R < 40 or G < 40 or B < 40: #between the tiles are also black
return y
Если это обнаруживает плитку, мышь перемещается туда и щелкает
if get_black_px(image_r, 10) != None:
Mouse.position = (170, get_black_px(image_r, 10)+500)
Mouse.click(Button.right, 1)
elif get_black_px(image_cr, 10) != None:
Mouse.position = (610, get_black_px(image_cr, 10)+500)
Mouse.click(Button.right, 1)
elif get_black_px(image_cl, 10) != None:
Mouse.position = (1030, get_black_px(image_cl, 10)+500)
Mouse.click(Button.right, 1)
elif get_black_px(image_l, 10) != None:
Mouse.position = (1440, get_black_px(image_l, 10)+500)
Mouse.click(Button.right, 1)
Как я уже говорил, это работает, но даже когда игра идет медленно, она щелкаетв середине плитки, а не внизу.Поэтому, если вам известен более быстрый способ сделать это или вы видите ошибку или что-то еще, пожалуйста, дайте мне знать.
Редактировать: добавлен рисунок