diff --git a/combined_bot_main.py b/combined_bot_main.py index 90257e2..01983da 100644 --- a/combined_bot_main.py +++ b/combined_bot_main.py @@ -12,6 +12,7 @@ from fruit import Fruit from pickaxe import Pickaxe_Field from litris import Litris from menti_words import MentiWords +from flappy import Flappy def run(): @@ -73,6 +74,10 @@ def run(): elif overlay.rb_int.get() == 11: menti = MentiWords(overlay) menti.execute_main_loop() + elif overlay.rb_int.get() == 12: + flappy = Flappy(overlay) + flappy.execute_main_loop() + flappy.flappy_pos_disc.run_mode = 'stop' if __name__ == "__main__": run() diff --git a/combined_user_interface.py b/combined_user_interface.py index 4306dc3..19df8c4 100644 --- a/combined_user_interface.py +++ b/combined_user_interface.py @@ -33,7 +33,7 @@ class PrimaryOverlay(threading.Thread): self.Emitter_Box = ttk.Combobox self.RadioButtons = dict - self.RadioButtonNames = ["Equip", "Crops", "Farm", "Magic", "Craft", "Mine", "Fruit", "Sodo", "PAxe", "Ltris", "Menti"] + self.RadioButtonNames = ["Equip", "Crops", "Farm", "Magic", "Craft", "Mine", "Fruit", "Sodo", "PAxe", "Ltris", "Menti", "Flapp"] self.RadioButton1 = tk.Radiobutton self.RadioButton2 = tk.Radiobutton self.RadioButton3 = tk.Radiobutton @@ -45,12 +45,13 @@ class PrimaryOverlay(threading.Thread): self.RadioButton9 = tk.Radiobutton self.RadioButton10 = tk.Radiobutton self.RadioButton11 = tk.Radiobutton + self.RadioButton12 = tk.Radiobutton self.StartButton = tk.Button self.StopButton = tk.Button self.PauseButton = tk.Button self.QuitButton = tk.Button - self.TkPosition = '133x429+60+600' + self.TkPosition = '133x454+60+600' self.setDaemon(True) self.StatusLabel = tk.Label @@ -78,7 +79,7 @@ class PrimaryOverlay(threading.Thread): self.rb_int = tk.IntVar(self.root, value=1) self.RadioButtons = dict() # var = tk.IntVar(value=1) - for i in range(1, 12): + for i in range(1, 13): self.RadioButtons[i] = tk.Radiobutton(self.rb_frame, text=self.RadioButtonNames[i - 1], variable=self.rb_int, value=i, command=self.radio_button_callback) @@ -338,6 +339,17 @@ class PrimaryOverlay(threading.Thread): self.SpawnLabel.configure(text="") self.EnergyLabel.configure(text="") self.hide_mining_overlay() + elif self.rb_int.get() == 12: + self.EnergyEntry.configure(state=tk.DISABLED) + self.energy_use.set('') + self.SpawnEntry.configure(state=tk.DISABLED) + self.spawn_use.set('') + self.Emitter_Box.configure(state=tk.DISABLED) + self.emitter_use.set('') + self.EmitterLabel.configure(text="") + self.SpawnLabel.configure(text="") + self.EnergyLabel.configure(text="") + self.hide_mining_overlay() def get_run_mode(self): return self.run_mode diff --git a/flappy.py b/flappy.py new file mode 100644 index 0000000..7c78e8d --- /dev/null +++ b/flappy.py @@ -0,0 +1,63 @@ +import cv2 as cv +import numpy as np +from time import time + +import pydirectinput + +from game_base_class import GameBase +from pynput.keyboard import Key, Controller + +from flappy_pos_discovery_thread import FlappyPosDiscovery + +class Flappy(GameBase): + + def __init__(self, overlay): + super().__init__(overlay) + + self.keyboard = Controller() + + self.data_coordinates = np.zeros((20, 20), dtype=object) + self.observation = np.zeros((20, 20), dtype=int) + + self.colors = [1, 2, 3, 4, 5, 6, 7, 8, 9] + + self.offset_left = 610 + self.offset_down = 40 + + self.fill_data_coordinates() + + self.litris_reset_board = cv.imread("control_elements/sodoku_reset_button.jpg", cv.IMREAD_COLOR) + + self.flappy_pos_disc = FlappyPosDiscovery() + + self.move_mode = 1 + + def assess_playfield_and_make_move(self): + #last_letter_received = time() + while True: + if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused': + return + #pydirectinput.mouseDown() + #cv.waitKey(50) + #pydirectinput.mouseUp() + #cv.waitKey(250) + ''' + if self.stone_id_thread.get_pick_up_status() == False: + if (time() - last_letter_received) >= 5: + self.field.reset_field() + self.field.cleared_rows = 1 + last_letter_received = time() + self.dig_point(1500, 980, 100) + if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused': + return + continue + if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused': + return + cv.waitKey(50) + continue + + + self.stone_id_thread.set_pick_up_status(False) + ''' + + diff --git a/flappy/flappy-mask.png b/flappy/flappy-mask.png new file mode 100644 index 0000000..4b361b9 Binary files /dev/null and b/flappy/flappy-mask.png differ diff --git a/flappy/flappy.jpg b/flappy/flappy.jpg new file mode 100644 index 0000000..dd219cf Binary files /dev/null and b/flappy/flappy.jpg differ diff --git a/flappy/flappy.png b/flappy/flappy.png new file mode 100644 index 0000000..e062ef7 Binary files /dev/null and b/flappy/flappy.png differ diff --git a/flappy/gate-mask.png b/flappy/gate-mask.png new file mode 100644 index 0000000..fa274f6 Binary files /dev/null and b/flappy/gate-mask.png differ diff --git a/flappy/gate.jpg b/flappy/gate.jpg new file mode 100644 index 0000000..8e8f35e Binary files /dev/null and b/flappy/gate.jpg differ diff --git a/flappy/gate.png b/flappy/gate.png new file mode 100644 index 0000000..5bbaf49 Binary files /dev/null and b/flappy/gate.png differ diff --git a/flappy/screen.jpg b/flappy/screen.jpg new file mode 100644 index 0000000..0b47c58 Binary files /dev/null and b/flappy/screen.jpg differ diff --git a/flappy_pos_discovery_thread.py b/flappy_pos_discovery_thread.py new file mode 100644 index 0000000..3eed375 --- /dev/null +++ b/flappy_pos_discovery_thread.py @@ -0,0 +1,62 @@ +import threading +import cv2 as cv +import numpy as np +from window_capture import WindowCapture +from vision import Vision +from config_file import UserConfigs + +class FlappyPosDiscovery(threading.Thread): + + def __init__(self): + threading.Thread.__init__(self) + + self.config = UserConfigs() + self.capture_window = WindowCapture(None, None, self.config) + self.vision_stun = Vision() + + self.needle_f = cv.imread("flappy/flappy.jpg") + self.mask_f = cv.imread("flappy/flappy-mask.png") + + self.needle_g = cv.imread("flappy/gate.png") + self.mask_g = cv.imread("flappy/gate-mask.png") + + self.run_mode = 'run' + self.current_pet_height = 0 + self.next_gate_height = 0 + + self.start() + + def run(self): + while self.run_mode == 'run': + self.position_detection() + print("pet_pos: ", self.current_pet_height) + print("next gate: ", self.next_gate_height) + def get_actual_pet_height(self): + return self.current_pet_height + + def get_next_gate_height(self): + return self.next_gate_height + def callback(self): + pass + + def destroy(self): + self.destroy() + + def get_run_mode(self): + return self.run_mode + + + def position_detection(self): + + screenshot = self.capture_window.get_screenshot() + #screenshot = screenshot[580:845, 1148:1412] + + rectangles_g = self.vision_stun.find(screenshot, self.needle_g, 0.9, 5, True, self.mask_g) + rectangles_f = self.vision_stun.find(screenshot, self.needle_f, 0.9, 1, True, self.mask_f) + if len(rectangles_g) == 0 or len(rectangles_f) == 0: + return None + self.current_pet_height = rectangles_f[1] + rectangles_f[3] + self.next_gate_height = rectangles_g[1] + rectangles_g[3] + # return pet height and next gate height + +