I made a puzzle game once but with freeform pre-made pieces. Actually it was a map of the country with states as pieces.
The pieces were frames in an animation, put in their destination spots in the editor, set to invisible on runtime startup and disabled for mouse dragging. Then a random piece was created by selecting a random frame. This piece could be dragged and upon being dropped it would snap into place if it was within a small distance of an invisible piece with the same frame number. Otherwise it would snap back to its original position.
Maybe that gives you some ideas for your own game, cheers.