-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBoardOnline.py
94 lines (80 loc) · 3.01 KB
/
BoardOnline.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from PIL import ImageGrab
import pyautogui
# YOU MAY NEED TO CHANGE THESE VALUES BASED ON YOUR SCREEN SIZE
LEFT = 648
TOP = 213
RIGHT = 792
BOTTOM = 334
EMPTY = 0
RED = 1
BLACK = 2
class BoardOnline:
def __init__(self) -> None:
self.board = [[EMPTY for i in range(7)] for j in range(6)]
def print_grid(self, grid):
for i in range(0, len(grid)):
for j in range(0, len(grid[i])):
if grid[i][j] == EMPTY:
print("*", end=" \t")
elif grid[i][j] == RED:
print("R", end=" \t")
elif grid[i][j] == BLACK:
print("B", end=" \t")
print("\n")
def _convert_grid_to_color(self, grid):
for i in range(0, len(grid)):
for j in range(0, len(grid[i])):
if grid[i][j] == (255, 255, 255):
grid[i][j] = EMPTY
elif grid[i][j][0] > 200:
grid[i][j] = RED
elif grid[i][j][0] > 50:
grid[i][j] = BLACK
return grid
def _get_grid_cordinates(self):
board_left, board_top, cell_size = 648, 213, 50 # obtain these values from somewhere
grid_cordinates = []
for row in range(8):
row_cordinates = []
for col in range(8):
x = board_left + col * cell_size + cell_size // 2
y = board_top + row * cell_size + cell_size // 2
row_cordinates.append((x, y))
grid_cordinates.append(row_cordinates)
return grid_cordinates
def _transpose_grid(self, grid):
return [[grid[j][i] for j in range(len(grid))] for i in range(len(grid[0]))]
def _capture_image(self):
image = ImageGrab.grab()
cropedImage = image.crop((LEFT, TOP, RIGHT, BOTTOM))
return cropedImage
def _convert_image_to_grid(self, image):
pixels = [[] for i in range(7)]
i = 0
for index, cord in enumerate(self._get_grid_cordinates()):
pixel = image.getpixel(cord)
if index % 6 == 0 and index != 0:
i += 1
pixels[i].append(pixel)
return pixels
def _get_grid(self):
cropedImage = self._capture_image()
pixels = self._convert_image_to_grid(cropedImage)
# cropedImage.show()
grid = self._transpose_grid(pixels)
return grid
def _check_if_game_end(self, grid):
for i in range(0, len(grid)):
for j in range(0, len(grid[i])):
if grid[i][j] == EMPTY and self.board[i][j] != EMPTY:
return True
return False
def get_game_grid(self):
game_grid = self._get_grid()
new_grid = self._convert_grid_to_color(game_grid)
is_game_end = self._check_if_game_end(new_grid)
self.board = new_grid
return (self.board, is_game_end)
def select_dimension(self, row, column):
cell_x, cell_y = self._get_grid_cordinates()[row][column]
pyautogui.click(cell_x, cell_y)