def create_board(position: Point, size: Size, columns: int, rows: int, tile_size: Size) -> MatchThreeBoard: if columns < 0: raise AttributeError(f'The number of columns must be positive') if rows < 0: raise AttributeError(f'The number of rows must be positive') offset = Point(int((size.width - tile_size.width * columns) / 2), int((size.height - tile_size.height * rows) / 2)) board = MatchThreeBoard(position.to_tuple(), size.to_tuple()) type_board: List[List[PieceType]] = [] for index in range(0, columns): position = Point(index * tile_size.height, 0) + offset column = Column(position, Size(tile_size.width, tile_size.height * rows)) for row in range(0, rows): if len(type_board) <= row: type_board.append([]) position = Point(0, row * tile_size.width) piece = Piece(position.to_tuple(), tile_size.to_tuple()) is_match = True new_piece = PieceType.BLACK while is_match: new_piece = PieceType.get_random_piece() is_match = src.piece.is_column_combination(board=type_board, column=index, row=row, new_piece=new_piece) is_match = is_match or src.piece.is_row_combination( board=type_board, column=index, row=row, new_piece=new_piece) piece.sprite = GraphicResource(new_piece.value, tile_size) piece.type = new_piece type_board[row].append(new_piece) column.children.append(piece) board.children.append(column) return board
def _new_piece() -> Piece: piece = Piece((0, -Piece.PIECE_SIZE.height), Piece.PIECE_SIZE.to_tuple()) piece.type = PieceType.get_random_piece() return piece