-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathboard.py
90 lines (76 loc) · 2.73 KB
/
board.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
from PIL import ImageGrab
import pyautogui
# YOU MAY NEED TO CHANGE THESE VALUES BASED ON YOUR SCREEN SIZE
LEFT = 577
TOP = 258
RIGHT = 1342
BOTTOM = 916
EMPTY = 0
RED = 1
BLUE = 2
class Board:
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] == BLUE:
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] = BLUE
return grid
def _get_grid_cordinates(self):
startCord = (55, 55)
cordArr = []
for i in range(0, 7):
for j in range(0, 6):
x = startCord[0] + i * 110
y = startCord[1] + j * 110
cordArr.append((x, y))
return cordArr
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)
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_column(self, column):
pyautogui.click(LEFT + self._get_grid_cordinates()[column * 6][0], TOP)