我正在尝试制作一个玩“不要点击白砖”的机器人。 到目前为止,我拥有的代码可以正常工作,但是有点慢,并且随着游戏速度的提高,该bot也会失败。
现在我正在使用PIL的ImageGrab.grab()
抓取4张图像:
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⇒左图
在下面您可以看到带有带有指示图像的框的游戏(大约)
然后针对每个像素,我用以下方法检查黑色像素:
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)
正如我之前说过的那样,这是可行的,但是即使游戏速度很慢,它也会在图块的中间而非底部单击。因此,如果您知道执行此操作的更快方法或发现错误或其他错误,请告诉我。
编辑:添加图片