Polyomino class

This commit is contained in:
Ian Jauslin 2021-11-24 17:51:57 -05:00
parent a8359a98bf
commit 221aa0a713

View File

@ -5,21 +5,17 @@ from kivy.graphics import Color,Line,Rectangle
from point import Point,l_infinity from point import Point,l_infinity
from tools import isint_nonzero,sgn,in_interval from tools import isint_nonzero,sgn,in_interval
class Square(): # parent class of all polyominos
# size class Polyomino():
size=50 def __init__(self,**kwargs):
# square elements that maje up the polyomino
self.squares=kwargs.get("squares",[])
def __init__(self,x,y,**kwargs):
self.pos=Point(x,y)
self.color=kwargs.get("color",(0,0,1)) self.color=kwargs.get("color",(0,0,1))
self.selected=False self.selected=False
# set position # draw function
def setpos(self,x,y): def draw(self):
self.pos.x=x
self.pos.y=y
def draw(self,**kwargs):
# set color # set color
if not self.selected: if not self.selected:
Color(*self.color) Color(*self.color)
@ -28,7 +24,45 @@ class Square():
# darken selected # darken selected
Color(r/2,g/2,b/2) Color(r/2,g/2,b/2)
Rectangle(pos=((self.pos.x-0.5)*self.size,(self.pos.y-0.5)*self.size),size=(self.size,self.size)) for square in self.squares:
Rectangle(pos=((square.pos.x-0.5)*square.size,(square.pos.y-0.5)*square.size),size=(square.size,square.size))
# draw boundary
self.stroke()
# draw boundary (override for connected polyominos)
def stroke(self):
# white
Color(1,1,1)
for square in self.squares:
Line(points=(
*((square.pos.x-0.5)*square.size,(square.pos.y-0.5)*square.size),
*((square.pos.x-0.5)*square.size,(square.pos.y+0.5)*square.size),
*((square.pos.x+0.5)*square.size,(square.pos.y+0.5)*square.size),
*((square.pos.x+0.5)*square.size,(square.pos.y-0.5)*square.size)
))
# square
class Square(Polyomino):
def __init__(self,x,y,**kwargs):
super(Square,self).__init__(squares=[Square_element(x,y)],kwargs)
# square building block of polyominos
class Square_element():
# size
size=50
def __init__(self,x,y,**kwargs):
self.pos=Point(x,y)
# set position
def setpos(self,x,y):
self.pos.x=x
self.pos.y=y
# check whether a square at pos interacts with square # check whether a square at pos interacts with square
def check_interaction(self,pos): def check_interaction(self,pos):