|
@@ -1,19 +1,9 @@
|
|
|
#!/usr/bin/env python3
|
|
#!/usr/bin/env python3
|
|
|
-import os
|
|
|
|
|
import time
|
|
import time
|
|
|
-import numpy as np
|
|
|
|
|
-from Xlib import display, X
|
|
|
|
|
-from PIL import Image
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
COLUMNS = 7
|
|
COLUMNS = 7
|
|
|
-WINDOW_WIDTH = 1600
|
|
|
|
|
-WINDOW_HEIGHT = 900
|
|
|
|
|
BLOCK_SIZE = 60
|
|
BLOCK_SIZE = 60
|
|
|
-BOARD_X = 367
|
|
|
|
|
-BOARD_Y = 129
|
|
|
|
|
-BOARD_WIDTH = COLUMNS * BLOCK_SIZE
|
|
|
|
|
-BOARD_HEIGHT = 638
|
|
|
|
|
|
|
|
|
|
MAX_COLUMN_HEIGHT = 546
|
|
MAX_COLUMN_HEIGHT = 546
|
|
|
DETECT_COLUMN_OFFSET_X = 8, 50
|
|
DETECT_COLUMN_OFFSET_X = 8, 50
|
|
@@ -49,43 +39,6 @@ def is_hue(h, hexpect):
|
|
|
return abs(h - hexpect) <= HUE_TOLERANCE
|
|
return abs(h - hexpect) <= HUE_TOLERANCE
|
|
|
|
|
|
|
|
|
|
|
|
|
-def find_window(name):
|
|
|
|
|
- def traverse(window):
|
|
|
|
|
- if window.get_wm_name() == name:
|
|
|
|
|
- return window
|
|
|
|
|
-
|
|
|
|
|
- for child in window.query_tree().children:
|
|
|
|
|
- win = traverse(child)
|
|
|
|
|
- if win:
|
|
|
|
|
- return win
|
|
|
|
|
-
|
|
|
|
|
- return traverse(display.Display().screen().root)
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-def get_exapunks_window():
|
|
|
|
|
- win = find_window('EXAPUNKS')
|
|
|
|
|
- assert win, 'EXAPUNKS window not found'
|
|
|
|
|
- geo = win.get_geometry()
|
|
|
|
|
- assert geo.width == WINDOW_WIDTH
|
|
|
|
|
- assert geo.height == WINDOW_HEIGHT
|
|
|
|
|
- return win
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-def focus_window(window):
|
|
|
|
|
- window.set_input_focus(X.RevertToNone, X.CurrentTime)
|
|
|
|
|
- window.raise_window()
|
|
|
|
|
- display.Display().sync()
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-def screenshot_board(window):
|
|
|
|
|
- start = time.time()
|
|
|
|
|
- raw = window.get_image(BOARD_X, BOARD_Y, BOARD_WIDTH, BOARD_HEIGHT,
|
|
|
|
|
- X.ZPixmap, 0xffffffff)
|
|
|
|
|
- dim = BOARD_WIDTH, BOARD_HEIGHT
|
|
|
|
|
- im = Image.frombytes('RGB', dim, raw.data, 'raw', 'BGRX')
|
|
|
|
|
- return im.convert('HSV')
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
def detect_columns(board):
|
|
def detect_columns(board):
|
|
|
def saturated(x, y):
|
|
def saturated(x, y):
|
|
|
h, s, v = board.getpixel((x, y))
|
|
h, s, v = board.getpixel((x, y))
|
|
@@ -165,6 +118,8 @@ def print_board(blocks, exa, held):
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if __name__ == '__main__':
|
|
|
|
|
+ from iteraction import get_exapunks_window, screenshot_board
|
|
|
|
|
+
|
|
|
win = get_exapunks_window()
|
|
win = get_exapunks_window()
|
|
|
win.raise_window()
|
|
win.raise_window()
|
|
|
|
|
|