Skip to content
Snippets Groups Projects
cell.py 2.8 KiB
Newer Older
from shapes import *
from functions import *


class Cell:
    # 1st char = name, 2nd = number of rotations, 3rd = number of reflections
    s = {"s1": ["p00"],  # List of all the shapes possible, indexed by the number of cells
         "s2": ["s00", "s10"],
         "s3": ["l00", "l10",
                "c00", "c10", "c20", "c30"],
         "s4": ["O00",
                "J00", "J10", "J20", "J30", "J01", "J11", "J21", "J31",
                "i00", "i10",
                "z00", "z10", "z01", "z11",
                "t00", "t10", "t20", "t30"],
         "s5": ["L00", "L10", "L20", "L30", "L01", "L11", "L21", "L31",
                "T00", "T10", "T20", "T30",
                "N00", "N10", "N20", "N30", "N01", "N11", "N21", "N31",
                "Z00", "Z10", "Z01", "Z11",
                "I00", "I10",
                "P00", "P10", "P20", "P30", "P01", "P11", "P21", "P31",
                "W00", "W10", "W20", "W30",
                "F00", "F10", "F20", "F30", "F01", "F11", "F21", "F31",
                "X00",
                "Y00", "Y10", "Y20", "Y30", "Y01", "Y11", "Y21", "Y31"]}

    def __init__(self, co: list, val: int):  # Initialisaiton
        self.co = co  # Coordinates
        self.val = val  # Value
        self.numGroup = None  # Number of group
        # List of possible positions
        self.lpos = [z + 1 for z in range(self.val)]
        self.lform = list(Cell.s["s" + str(self.val)]
                          )  # List of possible forms
        self.selForm = None  # Selected form
        self.selPos = None  # Selected position
        self.coefx = None  # Coefficient of x
        self.coefy = None  # Coefficient of y

    def give(self):  # Give a new form and/or position
        if self.selForm == None:
            self.selForm = select(extract(self.lform))
        elif len(self.lpos) == 0:
            if len(self.lform) == 0:
                return False
            else:
                self.selForm = select(extract(self.lform))
                self.lpos = [z + 1 for z in range(self.val)]
        self.selPos = extract(self.lpos)

        z = 0  # Determination of the position of the selected form corresponding to the number
        for y in range(len(self.selForm)):
            for x in range(len(self.selForm[0])):
                if self.selForm[y][x] == 1:
                    z += 1
                    if z == self.selPos:
                        # Coordinates of the point inside the form
                        coForme = [y, x]

        self.coefx = self.co[1] - coForme[1]
        self.coefy = self.co[0] - coForme[0]

        return True

    def getSelForm(self):
        return self.selForm

    def getCoefx(self):
        return self.coefx

    def getCoefy(self):
        return self.coefy

    def getNum(self):
        return self.numGroup

    def setNum(self, num: int):
        self.numGroup = num