Changeset - ae5bc0b73715
[Not reviewed]
default
0 1 0
Laman - 6 years ago 2018-12-04 17:21:39

enhanced exportBoard: marks stars
1 file changed with 13 insertions and 2 deletions:
0 comments (0 inline, 0 general)
src/util.py
Show inline comments
 
import random
 
import multiprocessing
 
import logging
 

	
 
log=logging.getLogger(__name__)
 

	
 
EMPTY=0
 
BLACK=1
 
WHITE=-1
 

	
 
colorNames={BLACK:"B",WHITE:"W"}
 

	
 

	
 
class MsgQueue:
 
	def __init__(self,handler=None):
 
		self._queue=multiprocessing.Queue()
 
		self._event=multiprocessing.Event()
 
		self._handleEvent=handler
 

	
 
	def send(self,actionName,args=tuple(),kwargs=None):
 
		if kwargs is None: kwargs=dict()
 
		self._queue.put((actionName,args,kwargs))
 
		self._event.set()
 

	
 
	def listen(self,handleEvent=None):
 
		if handleEvent is not None: self._handleEvent=handleEvent
 

	
 
		while True:
 
			self._event.wait()
 
			msg=self._queue.get()
 
			if self._queue.empty():
 
				self._event.clear()
 
			log.info(msg)
 
			if msg[0]=="!kill": break
 
			self._handleEvent(msg)
 

	
 
	def setHandler(self,handler):
 
		self._handleEvent=handler
 

	
 

	
 
rand=random.Random()
 
rand.seed(361)
 
zobristNums=tuple(
 
	tuple(
 
		tuple(rand.getrandbits(32) for i in range(3)) for c in range(19)
 
	) for r in range(19)
 
)
 

	
 
def hashBoard(board):
 
	res=0
 
	for (r,row) in enumerate(board):
 
		for (c,item) in enumerate(row):
 
			res^=zobristNums[r][c][item+1]
 
	return res
 

	
 

	
 
def diffHash(r,c,oldItem,newItem):
 
	h=zobristNums[r][c]
 
	return h[oldItem+1] ^ h[newItem+1]
 

	
 

	
 
def exportBoard(board):
 
	substitutions={EMPTY:".", BLACK:"X", WHITE:"O"}
 
	return "\n".join("".join(substitutions.get(x,"?") for x in row) for row in board)
 
	substitutions={BLACK:"X", WHITE:"O"}
 
	template=[["."]*19 for r in range(19)]
 
	for r in range(3,19,6):
 
		for c in range(3,19,6):
 
			template[r][c]=","
 

	
 
	for (row,templateRow) in zip(board,template):
 
		for (c,x) in enumerate(row):
 
			if x!=EMPTY: templateRow[c]=substitutions[x]
 

	
 
	return "\n".join("".join(row) for row in template)
0 comments (0 inline, 0 general)