better color distinction
[imago.git] / imago_pack / output.py
index 82d1e4f..bc13280 100644 (file)
@@ -4,29 +4,6 @@ import sys
 
 COORDS = 'abcdefghijklmnopqrs'
 
-def txt2sgf(board):
-    """Converts textual represantation to SGF (set position)."""
-
-    board = sys.stdin.read().split('\n')
-    board = [line.split() for line in board]
-
-    black = []
-    white = []
-
-    for i in range(19):
-        for j in range(19):
-            if board[i][j] == 'B':
-                black.append((i, j))
-            elif board[i][j] == 'W':
-                white.append((i, j))
-
-    sgf = ""
-    #TODO version numbering
-    sgf += "(;FF[4]GM[1]SZ[19]AP[Imago:0.1.0]"
-    sgf += "AB" + ''.join('[' + coords[j] + coords[i] + ']' for (i, j) in black) 
-    sgf += "AW" + ''.join('[' + coords[j] + coords[i] + ']' for (i, j) in white)
-    sgf += ")"
-
 class Board:
     def __init__(self, size, stones):
         self.stones = stones        
@@ -43,13 +20,64 @@ class Board:
             lines.append(" ".join(line))
         return ("\n".join(lines))
 
+    def asSGFsetPos(self):
+        """Returns SGF (set position) representation of the position."""
+
+        #TODO version numbering
+        sgf = "(;FF[4]GM[1]SZ[" + str(self.size) + "]AP[Imago:0.1.0]\n"
+        sgf += self.SGFpos()
+        sgf += ")"
+        return sgf
+
+    def SGFpos(self):
+        black = []
+        white = []
+
+        for i in range(self.size):
+            for j in range(self.size):
+                stone = self.stones[i * self.size + j]
+                if stone == 'B':
+                    black.append((i, j))
+                elif stone == 'W':
+                    white.append((i, j))
+        sgf = ""
+        if len(black) > 0:
+            sgf += "AB" + ''.join('[' + COORDS[j] + COORDS[i] + ']'
+                              for (i, j) in black) + "\n"
+        if len(white) > 0:
+            sgf += "AW" + ''.join('[' + COORDS[j] + COORDS[i] + ']' 
+                              for (i, j) in white) + "\n"
+        return sgf
+
+    def getMove(self, board):
+        for i in range(self.size):
+            for j in range(self.size):
+                if (self.stones[self.size * i + j] == "."):
+                    if (board.stones[self.size * i + j] == "W"):
+                        return ("W", COORDS[i] + COORDS[j])
+                    elif (board.stones[self.size * i + j] == "B"):
+                        return ("B", COORDS[i] + COORDS[j])
+        return None
 
 
 class Game:
-    def __init__(self, size):
-        self.board =  (size * size) * "."
+    def __init__(self, size, board=None):
+        self.init_board = board or Board(size, (size * size) * ".")
+        self.board = self.init_board
         self.moves = []
+        self.size = size
+
+    def addMove(self, board):
+        self.moves.append(self.board.getMove(board))
+        self.board = board
+
+    def asSGF(self):
+        sgf = "(;FF[4]GM[1]SZ[" + str(self.size) + "]AP[Imago:0.1.0]\n"
+        sgf += self.init_board.SGFpos()
+        for m in self.moves:
+            if m:
+                sgf += ";" + m[0] + "[" + m[1] + "]\n"
+        sgf += ")"
+        return sgf
 
-    def add(self, board):
-        self