lumberjackBot/lumberjackBot.py
Enrique Moran 50652242c1
fixed images, max speed 0.2
Incoming update
2018-03-11 23:04:59 +01:00

78 lines
2.5 KiB
Python

import pyautogui
import time
from ctypes import windll
import threading
class lumberjackBot():
__author__ = "EnriqueMoran"
def __init__(self, playX, playY, treeX, treeY):
self.playX = playX
self.playY = playY
self.treeX = treeX
self.treeY = treeY
# Those attributes has been placed here in order to save calcs:
self.pixelL = (0,0,0) # Left side branch color
self.pixelR = (0,0,0) # Right side branch color
self.lX = treeX - 30 # Left side branch X location
self.rX = treeX + 30 # Right side branch X location
self.y = treeY - 132 # Both side branch Y location
def move(self, direction):
speed = 0.2
if direction == "left":
pyautogui.typewrite(['left', 'left'], speed)
elif direction == "right":
pyautogui.typewrite(['right', 'right'], speed)
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, side): # Modify class atribute
screen = windll.user32.GetDC(0)
rgb = windll.gdi32.GetPixel(screen, x, y)
if side == 'L':
self.pixelL = self.get_color(rgb)
elif side == 'R':
self.pixelR = self.get_color(rgb)
def play(self):
self.move("right")
while True:
if self.pixelL == (161, 116, 56):
self.move("right")
elif self.pixelR == (161, 116, 56):
self.move("left")
def pixelThreadL(self):
while True:
self.get_pixel(self.lX, self.y, 'L')
def pixelThreadR(self):
while True:
self.get_pixel(self.rX, self.y, 'R')
if __name__ == "__main__":
print("Running in 5 seconds, minimize this windows.")
time.sleep(5)
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
treeX, treeY = playX - 6, playY - 177 # Tree position
time.sleep(0.3)
print("Im playing... To stop me click on IDLE and press CTRL+F6.")
lumberjack = lumberjackBot(playX, playY, treeX, treeY)
t1 = threading.Thread(target = lumberjack.pixelThreadL, args = ())
t2 = threading.Thread(target = lumberjack.pixelThreadR, args = ())
t1.start()
t2.start()
lumberjack.play() # Game start