diff --git a/src/go/core.py b/src/go/core.py --- a/src/go/core.py +++ b/src/go/core.py @@ -1,6 +1,6 @@ import logging as log -from util import EMPTY,BLACK,WHITE,colorNames +from util import EMPTY,BLACK,WHITE, colorNames,hashBoard from .helperboard import HelperBoard from .gamerecord import GameRecord @@ -12,6 +12,7 @@ class Go: self.board=[[EMPTY]*boardSize for x in range(boardSize)] self.toMove=BLACK self._helper=HelperBoard(self.board) + self._hashes=[] self._record=GameRecord() def listMoves(self,diff=[]): @@ -41,15 +42,19 @@ class Go: return False self._record.move(color,row,col) self.toMove=-1*color + self._hashes.append(self.hash()) return True - def undoMove(self,color,r,c,captures): - self.board[r][c]=color + def undoMove(self,r,c,captures): + assert self.board[r][c]==-1*self.toMove + self.toMove*=-1 + self.board[r][c]=self.toMove if len(captures)>0: self._helper.clear() for (r,c) in captures: self._helper.floodFill(EMPTY,r,c) - self._fill(-color) + self._fill(-self.toMove) + self._hashes.pop() def transitionMove(self,board): res=transitionMove(self.board,board) @@ -57,6 +62,9 @@ class Go: (r,c,color)=res return self.doMove(color,r,c) + def hash(self): + return hashBoard(self.board) + ## Removes stones at coordinates marked with True in self.helper. def _remove(self): self._fill(EMPTY)