Files
@ f1f8a2421f92
Branch filter:
Location: OneEye/src/util.py - annotation
f1f8a2421f92
1.6 KiB
text/x-python
updated readme
077600f0c5f8 5f4489f36388 7f6fac7f6d8e 5f4489f36388 7f6fac7f6d8e 5f4489f36388 782476e472ab 782476e472ab 782476e472ab 782476e472ab 782476e472ab 782476e472ab 782476e472ab 5f4489f36388 dc1ed8ff56ef dc1ed8ff56ef 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 5f4489f36388 2b850618ba88 dc1ed8ff56ef 5f4489f36388 dc1ed8ff56ef 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,name,handler=None):
self.name=name
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("%s <- %s", self.name, msg if msg[0]!="putFrame" else "('putFrame', ..., {})")
if msg[0]=="!kill": break
self._handleEvent(msg)
log.info("%s MsgQueue exiting.",self.name)
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)
|