""" Module that defines all types of pieces """ import pygame from .color import Color square_template = pygame.Surface((48, 48)) class Piece: """ A piece class that provides default methods for performing rotations """ def __init__(self): """ Initialize a piece """ self.square = square_template.copy() def rotate_clockwise(self): """ Rotate the piece clockwise """ self.elements = list(zip(*self.elements[::-1])) def rotate_counter_clockwise(self): """ Rotate the piece counter-clockwise """ self.rotate_clockwise() self.rotate_clockwise() self.rotate_clockwise() class ZPiece(Piece): def __init__(self): super().__init__() self.square.fill(Color.blue.value) self.elements = (self.square, self.square, None), (None, self.square, self.square), (None, None, None) self.vertical = False def rotate_clockwise(self): self.rotate() def rotate_counter_clockwise(self): self.rotate() def rotate(self): if self.vertical: self.elements = (self.square, self.square, None), (None, self.square, self.square), (None, None, None) else: self.elements = (None, None, self.square), (None, self.square, self.square), (None, self.square, None) self.vertical = not self.vertical class SPiece(Piece): def __init__(self): super().__init__() self.square.fill(Color.green.value) self.elements = (None, None, None), (None, self.square, self.square), (self.square, self.square, None) self.vertical = False def rotate_clockwise(self): self.rotate() def rotate_counter_clockwise(self): self.rotate() def rotate(self): if self.vertical: self.elements = (None, self.square, self.square), (self.square, self.square, None), (None, None, None) else: self.elements = (None, self.square, None), (None, self.square, self.square), (None, None, self.square) self.vertical = not self.vertical class SquarePiece(Piece): def __init__(self): super().__init__() self.square.fill(Color.brown.value) self.elements = ((self.square, self.square), (self.square, self.square)) class IPiece(Piece): def __init__(self): super().__init__() self.square.fill(Color.red.value) self.elements = (None, None, None, None), (None, None, None, None), (self.square, self.square, self.square, self.square), (None, None, None, None) self.vertical = False def rotate_clockwise(self): self.rotate() def rotate_counter_clockwise(self): self.rotate() def rotate(self): if self.vertical: self.elements = (None, None, None, None), (None, None, None, None), (self.square, self.square, self.square, self.square), (None, None, None, None) else: self.elements = (None, None, self.square, None), (None, None, self.square, None), (None, None, self.square, None), (None, None, self.square, None) self.vertical = not self.vertical class LPiece(Piece): def __init__(self): super().__init__() self.square.fill(Color.cyan.value) self.elements = (None, None, None), (self.square, self.square, self.square), (None, None, self.square) class JPiece(Piece): def __init__(self): super().__init__() self.square.fill(Color.purple.value) self.elements = (None, None, None), (self.square, self.square, self.square), (self.square, None, None) class TPiece(Piece): def __init__(self): super().__init__() self.square.fill(Color.yellow.value) self.elements = (None, None, None), (self.square, self.square, self.square), (None, self.square, None)