from .resizablecanvas import ResizableCanvas
from go 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.configure(width=360,height=360,background="#ffcc00")
self._padding=18
self._cellWidth=(self._width-2*self._padding)/18
self._cellHeight=(self._height-2*self._padding)/18
self._drawGrid()
def redrawState(self,gameState):
self.delete("black","white")
for r,row in enumerate(gameState):
for c,point in enumerate(row):
self._drawStone(r, c, point)
def _drawGrid(self):
padding=self._padding
for i in range(19):
self.create_line(padding,18*i+padding,self._width-padding,18*i+padding,tags="row",fill="#000000") # rows
self.create_line(18*i+padding,padding,18*i+padding,self._height-padding,tags="col",fill="#000000") # cols
self._drawStars()
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')
## 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):
if color==BLACK:
hexCode='#000000'
tag="black"
elif color==WHITE:
hexCode='#ffffff'
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)