""" Module that defines all types of pieces """ import pygame square_template = pygame.Surface((48, 48)) black = (0, 0, 0) white = (0xff, 0xff, 0xff) brown = (163, 75, 31) blue = (30, 34, 164) green = (30, 164, 59) red = (164, 30, 30) purple = (126, 30, 164) yellow = (164, 164, 30) cyan = (30, 164, 150) 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(blue) 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(green) 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(brown) self.elements = ((self.square, self.square), (self.square, self.square)) class IPiece(Piece): def __init__(self): super().__init__() self.square.fill(red) 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(cyan) 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(purple) 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(yellow) self.elements = (None, None, None), (self.square, self.square, self.square), (None, self.square, None)