BLACK = 1
WHITE = -1
EMPTY = 0
class Go:
board = [[EMPTY]*19 for i in range(19)]
def __init__(self):
self.board = [[EMPTY]*19 for i in range(19)]
self.move_count = 0
self.temp = [[]]
def move(self, color, y, x):
if self.board[x][y] != EMPTY:
return False
self.board[x][y] = color
for i, j in ((-1, 0), (1, 0), (0, -1), (0, 1)):
self.temp = [[False]*19 for i in range(19)]
if not self._flood_fill(-color, x + i, y + j):
self._remove()
self.temp = [[False]*19 for i in range(19)]
if not self._flood_fill(color, x, y):
self.board[x][y] = EMPTY
return False
self.move_count += 1
return True
def _flood_fill(self, color, x, y):
if x < 0 or x > 18 or y < 0 or y > 18:
return False
if self.temp[x][y]:
return False
if self.board[x][y] == EMPTY:
return True
if self.board[x][y] != color:
return False
self.temp[x][y] = True
return self._flood_fill(color, x - 1, y) or \
self._flood_fill(color, x + 1, y) or \
self._flood_fill(color, x, y - 1) or \
self._flood_fill(color, x, y + 1)
def _remove(self):
for i in range(19):
for j in range(19):
if self.temp[i][j]:
self.board[i][j] = EMPTY