diff --git a/util/PieceGenerator.py b/util/PieceGenerator.py index 18008d3..c347e00 100644 --- a/util/PieceGenerator.py +++ b/util/PieceGenerator.py @@ -8,35 +8,40 @@ from util.ConfigurationManager import ConfigurationManager """ class PieceGenerator: - __pieces = [] + __bucket = [] @classmethod def get_piece(cls, position): + if len(cls.__bucket) == 0: + cls.__generate_bucket() - if len(cls.__pieces) == 0: - for _ in range(7): - cls.__pieces.append(Piece(cls.__get_piece_shape(), position, cls.__get_piece_color())) + return Piece(cls.__get_piece_shape(cls.__bucket.pop()), position, cls.__get_piece_color()) - return cls.__pieces.pop() + @classmethod + def __generate_bucket(cls): + piece_types = list(range(7)) + while len(cls.__bucket) != 7: + random_number = random.randint(0, 6 - len(cls.__bucket)) + cls.__bucket.append(piece_types.pop(random_number)) - def __get_piece_shape(): - random_number = random.randint(0, 6) - - if random_number == 0: + def __get_piece_shape(piece_number): + if piece_number == 0: return Piece.I_SHAPE - if random_number == 1: + if piece_number == 1: return Piece.J_SHAPE - if random_number == 2: + if piece_number == 2: return Piece.L_SHAPE - if random_number == 3: + if piece_number == 3: return Piece.O_SHAPE - if random_number == 4: + if piece_number == 4: return Piece.S_SHAPE - if random_number == 5: + if piece_number == 5: return Piece.T_SHAPE - if random_number == 6: + if piece_number == 6: return Piece.Z_SHAPE + return None + def __get_piece_color(): random_number = random.randint(1, 3) return ConfigurationManager.configuration["color"]["base-" + str(random_number)]