diff --git a/src/go.py b/src/go.py --- a/src/go.py +++ b/src/go.py @@ -1,21 +1,22 @@ -class Go: - EMPTY=0 - BLACK=1 - WHITE=-1 +EMPTY=0 +BLACK=1 +WHITE=-1 - ## Initializes self.board to a list[r][c]=Go.EMPTY. + +class Go: + ## Initializes self.board to a list[r][c]=EMPTY. def __init__(self,boardSize=19): self.boardSize=boardSize - self.board=[[Go.EMPTY]*self.boardSize for x in range(boardSize)] + self.board=[[EMPTY]*self.boardSize for x in range(boardSize)] ## Executes a move. # # Doesn't check for kos. Suicide not allowed. # - # @param color Go.BLACK or Go.WHITE + # @param color BLACK or WHITE # @return True on success, False on failure (illegal move) def move(self,color,row,col): - if self.board[row][col]!=Go.EMPTY: return False + if self.board[row][col]!=EMPTY: return False self.board[row][col]=color @@ -27,7 +28,7 @@ # check for suicide self.temp=[[False]*self.boardSize for x in self.board] if not self._floodFill(color,row,col): - self.board[row][col]=Go.EMPTY + self.board[row][col]=EMPTY return False return True @@ -39,7 +40,7 @@ def _floodFill(self,color,row,col): if col<0 or col>=self.boardSize or row<0 or row>=self.boardSize: return False # out of range if self.temp[row][col]: return False # already visited - if self.board[row][col]==Go.EMPTY: return True # found a liberty + if self.board[row][col]==EMPTY: return True # found a liberty if self.board[row][col]!=color: return False # opponent's stone self.temp[row][col]=True # set visited return self._floodFill(color,row,col-1) or self._floodFill(color,row,col+1) or self._floodFill(color,row-1,col) or self._floodFill(color,row+1,col) # check neighbors @@ -48,4 +49,9 @@ def _remove(self): for r in range(self.boardSize): for c in range(self.boardSize): - if self.temp[r][c]: self.board[r][c]=Go.EMPTY + if self.temp[r][c]: self.board[r][c]=EMPTY + + +def exportBoard(board): + substitutions={EMPTY:".", BLACK:"X", WHITE:"O"} + return "\n".join("".join(substitutions.get(x,"?") for x in row) for row in board) diff --git a/src/gui/__init__.py b/src/gui/__init__.py --- a/src/gui/__init__.py +++ b/src/gui/__init__.py @@ -8,7 +8,7 @@ import config from epoint import EPoint from corners import Corners import image_analyzer -from go import Go +import go from grid import Grid @@ -151,10 +151,10 @@ class BoardView(tk.Canvas): # # @param r row coordinate, [0-18], counted from top # @param c column coordinate, [0-18], counted from left - # @param color color indicator, Go.BLACK or Go.WHITE + # @param color color indicator, go.BLACK or go.WHITE def drawStone(self,r,c,color): - if color==Go.BLACK: hexCode='#000000' - elif color==Go.WHITE: hexCode='#ffffff' + if color==go.BLACK: hexCode='#000000' + elif color==go.WHITE: hexCode='#ffffff' else: return False r+=1 c+=1 diff --git a/src/image_analyzer.py b/src/image_analyzer.py --- a/src/image_analyzer.py +++ b/src/image_analyzer.py @@ -1,12 +1,13 @@ import logging as log from grid import Grid -from go import Go +from go import exportBoard +import go class ImageAnalyzer: def __init__(self,tresB=30,tresW=60): - self.board=[[Go.EMPTY]*19 for r in range(19)] + self.board=[[go.EMPTY]*19 for r in range(19)] self.grid=None self.tresB=tresB @@ -24,8 +25,7 @@ class ImageAnalyzer: self.board[r][c]=self.analyzePoint(image,r,c,intersection,*(self.grid.stoneSizeAt(r,c))) - boardStr="\n".join(str(row) for row in self.board) - log.info("board analyzed:\n%s",boardStr) + log.info("board analyzed:\n%s", exportBoard(self.board)) def analyzePoint(self,image,row,col,imageCoords,stoneWidth,stoneHeight): b=w=e=0 @@ -45,9 +45,9 @@ class ImageAnalyzer: log.debug("(%d,%d) ... (b=%d,w=%d,e=%d)", row, col, b, w, e) - if b>=w and b>=e: return Go.BLACK - if w>=b and w>=e: return Go.WHITE - return Go.EMPTY + if b>=w and b>=e: return go.BLACK + if w>=b and w>=e: return go.WHITE + return go.EMPTY def setGridCorners(self,corners): self.grid=Grid(corners)