# HG changeset patch
# User Laman
# Date 2017-01-07 16:17:22
# Node ID 79f823432bb4cf9dae94779e1a2fc176b2e28547
# Parent  5f4489f36388c29aac33f4ebb9bd4fac87f7c3c9

nicer board logs

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)