import random import multiprocessing import logging as log 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 exportBoard(board): substitutions={EMPTY:".", BLACK:"X", WHITE:"O"} return "\n".join("".join(substitutions.get(x,"?") for x in row) for row in board)