+ 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(Move('B', i, j))
+ elif stone == 'W':
+ white.append(Move('W', i, j))
+ sgf = ""
+ if len(black) > 0:
+ sgf += "AB" + ''.join('[' + m.sgf_coords() + ']'
+ for m in black) + "\n"
+ if len(white) > 0:
+ sgf += "AW" + ''.join('[' + m.sgf_coords() + ']'
+ for m in white) + "\n"
+ return sgf
+
+ def addMove(self, m):
+ """Add move to the board."""
+ self.stones[(m.y * self.size) + m.x] = m.color
+
+ def getMoveCandidates(self, board):
+ """Take the next board in game and return a list of moves that are
+ new."""
+ candidates = []
+ 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"):
+ candidates.append(Move("W", i, j))
+ elif (board.stones[self.size * i + j] == "B"):
+ candidates.append(Move("B", i, j))
+ return candidates
+
+class Move:
+ """Repsresents a move."""
+ def __init__(self, color, y, x, comment=None):
+ self.color = color
+ self.x = x
+ self.y = y
+ self.comment = comment