projekty
/
imago.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
f64441a
)
better sgf output
author
Tomas Musil
<tomik.musil@gmail.com>
Tue, 22 Oct 2013 21:08:29 +0000
(23:08 +0200)
committer
Tomas Musil
<tomik.musil@gmail.com>
Tue, 22 Oct 2013 21:08:29 +0000
(23:08 +0200)
imago_pack/output.py
patch
|
blob
|
history
diff --git
a/imago_pack/output.py
b/imago_pack/output.py
index
bc13280
..
366d0d9
100644
(file)
--- a/
imago_pack/output.py
+++ b/
imago_pack/output.py
@@
-1,5
+1,6
@@
"""Imago output module."""
"""Imago output module."""
+import copy
import sys
COORDS = 'abcdefghijklmnopqrs'
import sys
COORDS = 'abcdefghijklmnopqrs'
@@
-18,6
+19,7
@@
class Board:
line.append(self.stones[k])
k += 1
lines.append(" ".join(line))
line.append(self.stones[k])
k += 1
lines.append(" ".join(line))
+ lines.append("")
return ("\n".join(lines))
def asSGFsetPos(self):
return ("\n".join(lines))
def asSGFsetPos(self):
@@
-37,46
+39,75
@@
class Board:
for j in range(self.size):
stone = self.stones[i * self.size + j]
if stone == 'B':
for j in range(self.size):
stone = self.stones[i * self.size + j]
if stone == 'B':
- black.append(
(
i, j))
+ black.append(
Move('B',
i, j))
elif stone == 'W':
elif stone == 'W':
- white.append(
(
i, j))
+ white.append(
Move('W',
i, j))
sgf = ""
if len(black) > 0:
sgf = ""
if len(black) > 0:
- sgf += "AB" + ''.join('[' +
COORDS[j] + COORDS[i]
+ ']'
- for
(i, j)
in black) + "\n"
+ sgf += "AB" + ''.join('[' +
m.sgf_coords()
+ ']'
+ for
m
in black) + "\n"
if len(white) > 0:
if len(white) > 0:
- sgf += "AW" + ''.join('[' +
COORDS[j] + COORDS[i]
+ ']'
- for
(i, j)
in white) + "\n"
+ sgf += "AW" + ''.join('[' +
m.sgf_coords()
+ ']'
+ for
m
in white) + "\n"
return sgf
return sgf
- def getMove(self, board):
+ def addMove(self, m):
+ self.stones[(m.y * self.size) + m.x] = m.color
+
+ def getMoveCandidates(self, board):
+ 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"):
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]
)
+
candidates.append(Move("W", i, j)
)
elif (board.stones[self.size * i + j] == "B"):
elif (board.stones[self.size * i + j] == "B"):
- return ("B", COORDS[i] + COORDS[j])
- return None
+ candidates.append(Move("B", i, j))
+ return candidates
+
+class Move:
+ def __init__(self, color, y, x, comment=None):
+ self.color = color
+ self.x = x
+ self.y = y
+ self.comment = comment
+ def sgf_coords(self):
+ return COORDS[self.x] + COORDS[self.y]
class Game:
class Game:
- def __init__(self, size, board=None):
+ def __init__(self, size, board=None
, debug=True
):
self.init_board = board or Board(size, (size * size) * ".")
self.init_board = board or Board(size, (size * size) * ".")
- self.board =
self.init_board
+ self.board =
copy.deepcopy(self.init_board)
self.moves = []
self.size = size
self.moves = []
self.size = size
+ self.debug = debug
+ self.debug_comment = ""
def addMove(self, board):
def addMove(self, board):
- self.moves.append(self.board.getMove(board))
- self.board = board
+ candidates = self.board.getMoveCandidates(board)
+ if self.debug:
+ comment = str(board)
+ comment += "Candidates: " + str(len(candidates))
+
+ if not candidates:
+ self.debug_comment += "No candidates."
+ return
+
+ move = candidates[0]
+ move.comment = comment
+ self.moves.append(move)
+ self.board.addMove(move)
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:
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 += ";" + m.color + "[" + m.sgf_coords() + "]"
+ if m.comment:
+ sgf += "C[" + m.comment + "]"
+ sgf += "\n"
sgf += ")"
return sgf
sgf += ")"
return sgf