Tetrominoes out of class
This commit is contained in:
parent
afcb919018
commit
759c6f2054
@ -10,115 +10,114 @@ class Mino:
|
|||||||
self.coord = coord
|
self.coord = coord
|
||||||
|
|
||||||
|
|
||||||
|
class MetaTetromino(type):
|
||||||
|
|
||||||
|
def __init__(cls, name, bases, dct):
|
||||||
|
super().__init__(name, bases, dct)
|
||||||
|
Tetromino.shapes.append(cls)
|
||||||
|
|
||||||
|
|
||||||
class Tetromino:
|
class Tetromino:
|
||||||
|
|
||||||
|
shapes = []
|
||||||
random_bag = []
|
random_bag = []
|
||||||
|
|
||||||
|
|
||||||
class MetaTetromino(type):
|
|
||||||
|
|
||||||
def __init__(cls, name, bases, dico):
|
|
||||||
super().__init__(name, bases, dico)
|
|
||||||
cls.classes.append(cls)
|
|
||||||
|
|
||||||
|
|
||||||
class AbstractTetromino(list):
|
|
||||||
|
|
||||||
# Super rotation system
|
|
||||||
SRS = {
|
|
||||||
Rotation.CLOCKWISE: (
|
|
||||||
(Coord(0, 0), Coord(-1, 0), Coord(-1, 1), Coord(0, -2), Coord(-1, -2)),
|
|
||||||
(Coord(0, 0), Coord(1, 0), Coord(1, -1), Coord(0, 2), Coord(1, 2)),
|
|
||||||
(Coord(0, 0), Coord(1, 0), Coord(1, 1), Coord(0, -2), Coord(1, -2)),
|
|
||||||
(Coord(0, 0), Coord(-1, 0), Coord(-1, -1), Coord(0, -2), Coord(-1, 2)),
|
|
||||||
),
|
|
||||||
Rotation.COUNTER: (
|
|
||||||
(Coord(0, 0), Coord(1, 0), Coord(1, 1), Coord(0, -2), Coord(1, -2)),
|
|
||||||
(Coord(0, 0), Coord(1, 0), Coord(1, -1), Coord(0, 2), Coord(1, 2)),
|
|
||||||
(Coord(0, 0), Coord(-1, 0), Coord(-1, 1), Coord(0, -2), Coord(-1, -2)),
|
|
||||||
(Coord(0, 0), Coord(-1, 0), Coord(-1, -1), Coord(0, 2), Coord(-1, 2)),
|
|
||||||
),
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super().__init__(
|
|
||||||
Mino(self.MINOES_COLOR, coord)
|
|
||||||
for coord in self.MINOES_COORDS
|
|
||||||
)
|
|
||||||
self.orientation = 0
|
|
||||||
self.last_rotation_point = None
|
|
||||||
self.hold_enabled = True
|
|
||||||
self.prelocked = False
|
|
||||||
|
|
||||||
def ghost(self):
|
|
||||||
return self.__class__()
|
|
||||||
|
|
||||||
class O(AbstractTetromino, metaclass=MetaTetromino):
|
|
||||||
|
|
||||||
SRS = {
|
|
||||||
Rotation.CLOCKWISE: (tuple(), tuple(), tuple(), tuple()),
|
|
||||||
Rotation.COUNTER: (tuple(), tuple(), tuple(), tuple()),
|
|
||||||
}
|
|
||||||
MINOES_COORDS = (Coord(0, 0), Coord(1, 0), Coord(0, 1), Coord(1, 1))
|
|
||||||
MINOES_COLOR = "yellow"
|
|
||||||
|
|
||||||
def rotate(self, direction):
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
class I(AbstractTetromino, metaclass=MetaTetromino):
|
|
||||||
|
|
||||||
SRS = {
|
|
||||||
Rotation.CLOCKWISE: (
|
|
||||||
(Coord(1, 0), Coord(-1, 0), Coord(2, 0), Coord(-1, -1), Coord(2, 2)),
|
|
||||||
(Coord(0, -1), Coord(-1, -1), Coord(2, -1), Coord(-1, 1), Coord(2, -2)),
|
|
||||||
(Coord(-1, 0), Coord(1, 0), Coord(-2, 0), Coord(1, 1), Coord(-2, -2)),
|
|
||||||
(Coord(0, -1), Coord(1, 1), Coord(-2, 1), Coord(1, -1), Coord(-2, 2)),
|
|
||||||
),
|
|
||||||
Rotation.COUNTER: (
|
|
||||||
(Coord(0, -1), Coord(-1, -1), Coord(2, -1), Coord(-1, 1), Coord(2, -2)),
|
|
||||||
(Coord(-1, 0), Coord(1, 0), Coord(-2, 0), Coord(1, 1), Coord(-2, -2)),
|
|
||||||
(Coord(0, 1), Coord(1, 1), Coord(-2, 1), Coord(1, -1), Coord(-2, 2)),
|
|
||||||
(Coord(1, 0), Coord(-1, 0), Coord(2, 0), Coord(-1, -1), Coord(2, 2)),
|
|
||||||
),
|
|
||||||
}
|
|
||||||
MINOES_COORDS = (Coord(-1, 0), Coord(0, 0), Coord(1, 0), Coord(2, 0))
|
|
||||||
MINOES_COLOR = "cyan"
|
|
||||||
|
|
||||||
|
|
||||||
class T(AbstractTetromino, metaclass=MetaTetromino):
|
|
||||||
|
|
||||||
MINOES_COORDS = (Coord(-1, 0), Coord(0, 0), Coord(0, 1), Coord(1, 0))
|
|
||||||
MINOES_COLOR = "magenta"
|
|
||||||
|
|
||||||
|
|
||||||
class L(AbstractTetromino, metaclass=MetaTetromino):
|
|
||||||
|
|
||||||
MINOES_COORDS = (Coord(-1, 0), Coord(0, 0), Coord(1, 0), Coord(1, 1))
|
|
||||||
MINOES_COLOR = "orange"
|
|
||||||
|
|
||||||
|
|
||||||
class J(AbstractTetromino, metaclass=MetaTetromino):
|
|
||||||
|
|
||||||
MINOES_COORDS = (Coord(-1, 1), Coord(-1, 0), Coord(0, 0), Coord(1, 0))
|
|
||||||
MINOES_COLOR = "blue"
|
|
||||||
|
|
||||||
|
|
||||||
class S(AbstractTetromino, metaclass=MetaTetromino):
|
|
||||||
|
|
||||||
MINOES_COORDS = (Coord(-1, 0), Coord(0, 0), Coord(0, 1), Coord(1, 1))
|
|
||||||
MINOES_COLOR = "green"
|
|
||||||
|
|
||||||
|
|
||||||
class Z(AbstractTetromino, metaclass=MetaTetromino):
|
|
||||||
|
|
||||||
MINOES_COORDS = (Coord(-1, 1), Coord(0, 1), Coord(0, 0), Coord(1, 0))
|
|
||||||
MINOES_COLOR = "red"
|
|
||||||
|
|
||||||
|
|
||||||
def __new__(cls):
|
def __new__(cls):
|
||||||
if not cls.random_bag:
|
if not cls.random_bag:
|
||||||
cls.random_bag = list(Tetromino.AbstractTetromino.classes)
|
cls.random_bag = list(cls.shapes)
|
||||||
random.shuffle(cls.random_bag)
|
random.shuffle(cls.random_bag)
|
||||||
return cls.random_bag.pop()()
|
return cls.random_bag.pop()()
|
||||||
|
|
||||||
|
|
||||||
|
class AbstractTetromino(list):
|
||||||
|
|
||||||
|
# Super rotation system
|
||||||
|
SRS = {
|
||||||
|
Rotation.CLOCKWISE: (
|
||||||
|
(Coord(0, 0), Coord(-1, 0), Coord(-1, 1), Coord(0, -2), Coord(-1, -2)),
|
||||||
|
(Coord(0, 0), Coord(1, 0), Coord(1, -1), Coord(0, 2), Coord(1, 2)),
|
||||||
|
(Coord(0, 0), Coord(1, 0), Coord(1, 1), Coord(0, -2), Coord(1, -2)),
|
||||||
|
(Coord(0, 0), Coord(-1, 0), Coord(-1, -1), Coord(0, -2), Coord(-1, 2)),
|
||||||
|
),
|
||||||
|
Rotation.COUNTER: (
|
||||||
|
(Coord(0, 0), Coord(1, 0), Coord(1, 1), Coord(0, -2), Coord(1, -2)),
|
||||||
|
(Coord(0, 0), Coord(1, 0), Coord(1, -1), Coord(0, 2), Coord(1, 2)),
|
||||||
|
(Coord(0, 0), Coord(-1, 0), Coord(-1, 1), Coord(0, -2), Coord(-1, -2)),
|
||||||
|
(Coord(0, 0), Coord(-1, 0), Coord(-1, -1), Coord(0, 2), Coord(-1, 2)),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__(
|
||||||
|
Mino(self.MINOES_COLOR, coord)
|
||||||
|
for coord in self.MINOES_COORDS
|
||||||
|
)
|
||||||
|
self.orientation = 0
|
||||||
|
self.last_rotation_point = None
|
||||||
|
self.hold_enabled = True
|
||||||
|
self.prelocked = False
|
||||||
|
|
||||||
|
def ghost(self):
|
||||||
|
return self.__class__()
|
||||||
|
|
||||||
|
class O(AbstractTetromino, metaclass=MetaTetromino):
|
||||||
|
|
||||||
|
SRS = {
|
||||||
|
Rotation.CLOCKWISE: (tuple(), tuple(), tuple(), tuple()),
|
||||||
|
Rotation.COUNTER: (tuple(), tuple(), tuple(), tuple()),
|
||||||
|
}
|
||||||
|
MINOES_COORDS = (Coord(0, 0), Coord(1, 0), Coord(0, 1), Coord(1, 1))
|
||||||
|
MINOES_COLOR = "yellow"
|
||||||
|
|
||||||
|
def rotate(self, direction):
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
class I(AbstractTetromino, metaclass=MetaTetromino):
|
||||||
|
|
||||||
|
SRS = {
|
||||||
|
Rotation.CLOCKWISE: (
|
||||||
|
(Coord(1, 0), Coord(-1, 0), Coord(2, 0), Coord(-1, -1), Coord(2, 2)),
|
||||||
|
(Coord(0, -1), Coord(-1, -1), Coord(2, -1), Coord(-1, 1), Coord(2, -2)),
|
||||||
|
(Coord(-1, 0), Coord(1, 0), Coord(-2, 0), Coord(1, 1), Coord(-2, -2)),
|
||||||
|
(Coord(0, -1), Coord(1, 1), Coord(-2, 1), Coord(1, -1), Coord(-2, 2)),
|
||||||
|
),
|
||||||
|
Rotation.COUNTER: (
|
||||||
|
(Coord(0, -1), Coord(-1, -1), Coord(2, -1), Coord(-1, 1), Coord(2, -2)),
|
||||||
|
(Coord(-1, 0), Coord(1, 0), Coord(-2, 0), Coord(1, 1), Coord(-2, -2)),
|
||||||
|
(Coord(0, 1), Coord(1, 1), Coord(-2, 1), Coord(1, -1), Coord(-2, 2)),
|
||||||
|
(Coord(1, 0), Coord(-1, 0), Coord(2, 0), Coord(-1, -1), Coord(2, 2)),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
MINOES_COORDS = (Coord(-1, 0), Coord(0, 0), Coord(1, 0), Coord(2, 0))
|
||||||
|
MINOES_COLOR = "cyan"
|
||||||
|
|
||||||
|
|
||||||
|
class T(AbstractTetromino, metaclass=MetaTetromino):
|
||||||
|
|
||||||
|
MINOES_COORDS = (Coord(-1, 0), Coord(0, 0), Coord(0, 1), Coord(1, 0))
|
||||||
|
MINOES_COLOR = "magenta"
|
||||||
|
|
||||||
|
|
||||||
|
class L(AbstractTetromino, metaclass=MetaTetromino):
|
||||||
|
|
||||||
|
MINOES_COORDS = (Coord(-1, 0), Coord(0, 0), Coord(1, 0), Coord(1, 1))
|
||||||
|
MINOES_COLOR = "orange"
|
||||||
|
|
||||||
|
|
||||||
|
class J(AbstractTetromino, metaclass=MetaTetromino):
|
||||||
|
|
||||||
|
MINOES_COORDS = (Coord(-1, 1), Coord(-1, 0), Coord(0, 0), Coord(1, 0))
|
||||||
|
MINOES_COLOR = "blue"
|
||||||
|
|
||||||
|
|
||||||
|
class S(AbstractTetromino, metaclass=MetaTetromino):
|
||||||
|
|
||||||
|
MINOES_COORDS = (Coord(-1, 0), Coord(0, 0), Coord(0, 1), Coord(1, 1))
|
||||||
|
MINOES_COLOR = "green"
|
||||||
|
|
||||||
|
|
||||||
|
class Z(AbstractTetromino, metaclass=MetaTetromino):
|
||||||
|
|
||||||
|
MINOES_COORDS = (Coord(-1, 1), Coord(0, 1), Coord(0, 0), Coord(1, 0))
|
||||||
|
MINOES_COLOR = "red"
|
Loading…
x
Reference in New Issue
Block a user