diff --git a/src/gamerecord.py b/src/gamerecord.py new file mode 100644 --- /dev/null +++ b/src/gamerecord.py @@ -0,0 +1,61 @@ +import logging as log + + +colorNames={1:"B",-1:"W"} + + +class Point: + def __init__(self,c,r): + self.r=r + self.c=c + + def __iter__(self): + yield self.c + yield self.r + + def __str__(self): + a=ord("a") + return chr(a+self.c)+chr(a+self.r) + + +class GameRecord: + def __init__(self): + self.playerB="" + self.playerW="" + self.root=Node() + self.currNode=self.root + + def move(self,color,row,col): + if color not in colorNames: + raise ValueError("invalid color: {0}".format(color)) + colorName=colorNames[color] + res=Node() + res.properties[colorName]=Point(col,row) + self.currNode.children.append(res) + self.currNode=res + return res + + def __str__(self): + res=["("] + stack=[self.root] + while len(stack)!=0: + v=stack.pop() + res.append(v) + if v==")": continue + if len(v.children)>1: + res.append("(") + stack.append(")") + stack.extend(reversed(v.children)) + res.append(")") + return "".join(str(x) for x in res) + + +class Node: + def __init__(self): + self.properties=dict() + self.parent=None + self.children=[] + + ## Returns textual representation of the Node itself, but disregards its children. + def __str__(self): + return ";" + "".join("{0}[{1}]".format(k,str(p)) for (k,p) in self.properties.items())