Files
@ 52d1a214c032
Branch filter:
Location: OneEye/src/util.py - annotation
52d1a214c032
1.6 KiB
text/x-python
refactoring and documenting API
077600f0c5f8 5f4489f36388 7f6fac7f6d8e 5f4489f36388 7f6fac7f6d8e 5f4489f36388 782476e472ab 782476e472ab 782476e472ab 782476e472ab 782476e472ab 782476e472ab 782476e472ab 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 d5d8fe073c1c d5d8fe073c1c d5d8fe073c1c 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 077600f0c5f8 f9ab2070bd69 ae5bc0b73715 32221aadca28 32221aadca28 32221aadca28 f9ab2070bd69 ae5bc0b73715 f9ab2070bd69 ae5bc0b73715 ae5bc0b73715 ae5bc0b73715 ae5bc0b73715 ae5bc0b73715 ae5bc0b73715 ae5bc0b73715 ae5bc0b73715 ae5bc0b73715 ae5bc0b73715 ae5bc0b73715 | 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":
self._queue.cancel_join_thread()
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={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)
|