diff --git a/branch.png b/branch.png index e0c78c9..9d2d6d7 100644 Binary files a/branch.png and b/branch.png differ diff --git a/lumberjackBot.py b/lumberjackBot.py index ffa1cd8..52d76d4 100644 --- a/lumberjackBot.py +++ b/lumberjackBot.py @@ -1,67 +1,68 @@ import pyautogui import time -from ctypes import windll -import threading - +from PIL import ImageGrab class lumberjackBot(): __author__ = "EnriqueMoran" - def __init__(self, playX, playY, treeX, treeY, x, y): - self.playX = playX - self.playY = playY - self.treeX = treeX - self.treeY = treeY - # Those attributes has been placed here in order to save calcs: - self.x = x # Left side branch X location - self.y = y + 5 # Left side branch Y location - self.movement_buffer = ["right"] # First movement + def __init__(self, x, y): + self.branch_width = 60 + self.vertical_branch_distance = 70 + self.to_match = (169, 113, 65) + self.speed = 0.08 + self.sleep = 0.083 + self.sleep_min = 0.078 + self.sleep_max = 0.090 + self.xl = x - self.branch_width + self.xr = x + self.branch_width + self.y = y - def move(self): - speed = 0.14 - if self.movement_buffer[0] == "left" and len(self.movement_buffer) == 2: - pyautogui.typewrite(['left', 'left'], speed) - elif self.movement_buffer[0] == "right" and len(self.movement_buffer) == 2: - pyautogui.typewrite(['right', 'right'], speed) - self.movement_buffer = self.movement_buffer[1:] - - def get_color(self, rgb): - r = rgb & 0xff - g = (rgb >> 8) & 0xff - b = (rgb >> 16) & 0xff - return r,g,b - - def get_pixel(self, x, y): # Modify class atribute - screen = windll.user32.GetDC(0) - rgb = windll.gdi32.GetPixel(screen, x, y) - return self.get_color(rgb) + def get_pixel(self): + scrshot = ImageGrab.grab() + m = lambda x: scrshot.getpixel(x) == self.to_match + match_l = any(filter(m, [(self.xl, self.y-offset) for offset in range(self.vertical_branch_distance)])) + match_r = any(filter(m, [(self.xr, self.y-offset) for offset in range(self.vertical_branch_distance)])) + return (match_l, match_r) def play(self): + last = [True]*5 + pyautogui.typewrite(['right', 'right'], self.speed) while True: - pixel_color = self.get_pixel(self.x, self.y) - if pixel_color == (161, 116, 56): - self.movement_buffer.append("right") - self.move() - elif pixel_color == (211, 247, 255) or pixel_color == (241, 252, 255): - self.movement_buffer.append("left") - self.move() - #print(pixel_color, self.x, self.y, self.movement_buffer) - - + match_l, match_r = self.get_pixel() + if match_l: + print('left match') + pyautogui.typewrite(['right', 'right'], self.speed) + elif match_r: + print('right match') + pyautogui.typewrite(['left', 'left'], self.speed) + else: + if not last[-1]: + pyautogui.typewrite(['right', 'right'], self.speed) + print('!! no match') + last.append(match_l or match_r) + while len(last) > 5: + del last[0] + stutter = len(list(filter(lambda x: not x, last))) + if stutter == 0 and self.sleep > self.sleep_min: + self.sleep -= 0.001 + print('dec sleep', self.sleep) + elif stutter > 1 and self.sleep < self.sleep_max: + self.sleep += 0.001 + print('inc sleep', self.sleep) + if not any(filter(lambda x: x, last)): + print('dead') + break + time.sleep(self.sleep) if __name__ == "__main__": + pyautogui.PAUSE = 0 print("Running in 3 seconds, minimize this windows. To stop the program drag the mouse to the top-left corner of your screen.") time.sleep(3) - playX, playY = pyautogui.locateCenterOnScreen('playButton.png') - pyautogui.moveTo(playX, playY) - pyautogui.click() # Start the game by pressing play button - time.sleep(0.5) # Wait for screen refresh x, y = pyautogui.locateCenterOnScreen('branch.png') - pyautogui.moveTo(x, y + 5) - treeX, treeY = playX - 6, playY - 177 # Tree position + pyautogui.moveTo(x, y) time.sleep(0.3) - print("Im playing... To stop me click on IDLE and press CTRL+F6.") - lumberjack = lumberjackBot(playX, playY, treeX, treeY, x, y) - lumberjack.play() # Game start + print("Im playing...") + lumberjack = lumberjackBot(x, y) + lumberjack.play() diff --git a/playButton.png b/playButton.png deleted file mode 100644 index 77eccca..0000000 Binary files a/playButton.png and /dev/null differ