Files
@ 630c42e6d376
Branch filter:
Location: OneEye/src/gui/boardview.py - annotation
630c42e6d376
2.8 KiB
text/x-python
requirements.txt
9fa3f70d50ba 3798475f45c1 4b4cae6939e8 4b4cae6939e8 4b4cae6939e8 9fa3f70d50ba 4b4cae6939e8 9fa3f70d50ba 9fa3f70d50ba 9ab11204b0f9 9fa3f70d50ba d138366bd4bb 9fa3f70d50ba 4b4cae6939e8 9ab11204b0f9 9ab11204b0f9 4b4cae6939e8 4b4cae6939e8 9ab11204b0f9 9ab11204b0f9 9ab11204b0f9 9ab11204b0f9 9ab11204b0f9 9ab11204b0f9 4b4cae6939e8 9fa3f70d50ba 9fa3f70d50ba 4b4cae6939e8 9b2865fdffa0 9b2865fdffa0 4b4cae6939e8 9fa3f70d50ba 9b2865fdffa0 4b4cae6939e8 9fa3f70d50ba d138366bd4bb d138366bd4bb d138366bd4bb d138366bd4bb 9fa3f70d50ba 9fa3f70d50ba d138366bd4bb 4b4cae6939e8 9b2865fdffa0 9b2865fdffa0 9b2865fdffa0 9b2865fdffa0 9b2865fdffa0 9b2865fdffa0 9b2865fdffa0 9b2865fdffa0 9b2865fdffa0 9b2865fdffa0 9b2865fdffa0 4b4cae6939e8 4b4cae6939e8 4b4cae6939e8 4b4cae6939e8 4b4cae6939e8 4b4cae6939e8 4b4cae6939e8 9ab11204b0f9 d138366bd4bb d138366bd4bb 9ab11204b0f9 d138366bd4bb d138366bd4bb d138366bd4bb 9ab11204b0f9 d138366bd4bb 4b4cae6939e8 d138366bd4bb 9fa3f70d50ba 9fa3f70d50ba 9fa3f70d50ba d138366bd4bb 9ab11204b0f9 9ab11204b0f9 dde4374cb22a dde4374cb22a dde4374cb22a addcbaf1754f dde4374cb22a dde4374cb22a | from .resizablecanvas import ResizableCanvas
from go.core import BLACK,WHITE
## Handles and presents the game state as detected by the program.
class BoardView(ResizableCanvas):
def __init__(self, master=None):
super().__init__(master)
self._padding=24
self.configure(width=360,height=360,background="#ffcc00")
self._drawGrid()
def redrawState(self,gameState,labels=dict()):
self.delete("black","white","label")
for r,row in enumerate(gameState):
for c,point in enumerate(row):
self._drawStone(r, c, point, labels.get((r,c)))
def configure(self,*args,**kwargs):
super().configure(*args,**kwargs)
self._cellWidth=(self._width-2*self._padding)/18
self._cellHeight=(self._height-2*self._padding)/18
def _drawGrid(self):
padding=self._padding
for i in range(19):
self.create_line(padding,self._cellHeight*i+padding,self._width-padding,self._cellHeight*i+padding,tags="row",fill="#000000") # rows
self.create_line(self._cellWidth*i+padding,padding,self._cellWidth*i+padding,self._height-padding,tags="col",fill="#000000") # cols
self._drawStars()
self._drawCoordinates()
def _drawStars(self):
radius=2
for r in range(3,19,6):
for c in range(3,19,6):
x=c*self._cellHeight+self._padding
y=r*self._cellWidth+self._padding
self.create_oval(x-radius,y-radius,x+radius,y+radius,tags="star",fill='#000000')
def _drawCoordinates(self):
for i in range(19):
letters="ABCDEFGHJKLMNOPQRST"
textWidth=12
# cols
self.create_text(self._padding+i*self._cellWidth,self._padding-textWidth,text=letters[i],tags="coords")
self.create_text(self._padding+i*self._cellWidth,self._height-self._padding+textWidth,text=letters[i],tags="coords")
# rows
self.create_text(self._padding-textWidth,self._padding+i*self._cellHeight,text=str(19-i),tags="coords")
self.create_text(self._width-self._padding+textWidth,self._padding+i*self._cellHeight,text=str(19-i),tags="coords")
## Draws a stone at provided coordinates.
#
# For an unknown color draws nothing and returns False.
#
# @param r row coordinate, [0-18], counted from top
# @param c column coordinate, [0-18], counted from left
# @param color color indicator, go.BLACK or go.WHITE
def _drawStone(self, r, c, color, label=""):
if color==BLACK:
hexCode='#000000'
altCode='#ffffff'
tag="black"
elif color==WHITE:
hexCode='#ffffff'
altCode='#000000'
tag="white"
else: return False
x=c*self._cellWidth+self._padding
y=r*self._cellHeight+self._padding
radius=self._cellWidth/2
self.create_oval(x-radius,y-radius,x+radius,y+radius,tags=tag,fill=hexCode)
if label:
self.create_text(x,y,text=label,tags="label",fill=altCode)
def _onResize(self,event):
super()._onResize(event)
self._padding=24*self._width/360
self._cellWidth=(self._width-2*self._padding)/18
self._cellHeight=(self._height-2*self._padding)/18
|