from pathlib import Path from PIL import Image import numpy as np def get_jigsaw_pieces(size): ''' Load all pieces of the 4x4 jigsaw puzzle. size (int) : Should be 64 or 256, indicating side length of jigsaw puzzle ''' # Location of pieces piece_dir = Path(__file__).parent / 'assets' # Helper function to load pieces as np arrays def load_pieces(path): ''' Load a piece, from the given path, as a binary numpy array. Return a list of the "base" piece, and all four of its rotations. ''' piece = Image.open(path) piece = np.array(piece)[:,:,0] // 255 pieces = np.stack([np.rot90(piece, k=-i) for i in range(4)]) return pieces # Load pieces and rotate to get 16 pieces, and cat pieces_corner = load_pieces(piece_dir / f'4x4/4x4_corner_{size}.png') pieces_inner = load_pieces(piece_dir / f'4x4/4x4_inner_{size}.png') pieces_edge1 = load_pieces(piece_dir / f'4x4/4x4_edge1_{size}.png') pieces_edge2 = load_pieces(piece_dir / f'4x4/4x4_edge2_{size}.png') pieces = np.concatenate([pieces_corner, pieces_inner, pieces_edge1, pieces_edge2]) return pieces