Changeset - 231b6d9b9561
[Not reviewed]
default
0 1 0
Laman - 7 years ago 2017-12-16 15:56:41

engine: slightly enhanced handling movelist
1 file changed with 14 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/go/engine.py
Show inline comments
 
@@ -66,7 +66,8 @@ class Engine:
 

	
 
	def dfs(self,state2,limit):
 
		g=self._g
 
		for (r,c) in self._moveList[(1-g.toMove)>>1]:
 
		moveSet=self._moveList[(1-g.toMove)>>1]
 
		for (r,c) in moveSet.copy():
 
			if g.board[r][c]!=EMPTY: continue
 
			neighbours=(
 
				g.board[r-1][c] if r>0 else None,
 
@@ -75,18 +76,27 @@ class Engine:
 
				g.board[r][c+1] if c+1<g.boardSize else None
 
			)
 
			if not g.doMove(g.toMove,r,c): continue
 
			moveSet.remove((r,c))
 
			captured=tuple(
 
				coords for (i,coords) in enumerate(((r-1,c),(r+1,c),(r,c-1),(r,c+1)))
 
				if neighbours[i] is not None and neighbours[i]!=EMPTY and g.board[coords[0]][coords[1]]==EMPTY
 
			)
 
			if g.hash()==state2.hash(): return [(-1*g.toMove,r,c)]
 

	
 
			if g.hash()==state2.hash():
 
				g.undoMove(r,c,captured)
 
				moveSet.add((r,c))
 
				return [(g.toMove,r,c)]
 

	
 
			if limit>1:
 
				toMove=-1*g.toMove
 
				seq=self.dfs(state2,limit-1)
 
				if seq:
 
					seq.append((toMove,r,c))
 
					g.undoMove(r,c,captured)
 
					moveSet.add((r,c))
 
					seq.append((g.toMove,r,c))
 
					return seq
 

	
 
			g.undoMove(r,c,captured)
 
			moveSet.add((r,c))
 
		return False
 

	
 
eng=Engine()
0 comments (0 inline, 0 general)