Browse Source

fix shit code (rewrite)

master
JerryXiao 3 months ago
parent
commit
6da76dc344
Signed by: Jerry GPG Key ID: 9D9CE43650FF2BAA
  1. BIN
      branch.png
  2. 99
      lumberjackBot.py
  3. BIN
      playButton.png

BIN
branch.png

Before

Width: 5  |  Height: 24  |  Size: 114 B

After

Width: 34  |  Height: 225  |  Size: 684 B

99
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
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:]
self.xl = x - self.branch_width
self.xr = x + self.branch_width
self.y = y
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()

BIN
playButton.png

Before

Width: 25  |  Height: 8  |  Size: 123 B

Loading…
Cancel
Save