Разрешить пользователю перетаскивать каждый элемент в область контура. Разрешить поворот части с шагом 90 градусов.
Вариант 1:
Если часть находится в правильном месте в общей головоломке, и под правильным углом, И соединена с другой частью, то защелкните ее на месте с некоторой обратной связью с пользователем. Внешний край головоломки может рассчитывать на связь с краями.
Вариант 2:
Сосед - это смежная часть головоломки, когда она собрана. Когда кусочки головоломки перепутаны, у них остаются те же соседи. Каждая часть головоломки (кроме краевых) имеет четырех соседей.
Если кусок находится рядом с одним из его соседей под правильным углом относительно этого соседа, то привязайте его к другому фрагменту. Затем позвольте двум (или более) фигурам перетаскиваться как единое целое, как это делается с одним куском. Это позволило бы пользователю собирать подразделы головоломки в любой области, как это делается с помощью физической головоломки, и связывать подразделы друг с другом.
Вы можете проверить деталь, перемещаемую к его четырем соседям, чтобы увидеть, достаточно ли они близки, чтобы соединиться. Если у правильного края элемента достаточно близко к соответствующему краю соседа, под тем же углом, то они совпадают.
Есть несколько способов проверить относительные местоположения. Один из способов - временно повернуть координаты части, которую вы тестируете, чтобы она была в вертикальном положении, а затем повернуть координаты всех желаемых соседей, также временно, на один угол. (Используйте один и тот же центр вращения для всех поворотов.) Затем вы можете легко проверить, достаточно ли они близки для соответствия. Если пользователь перетаскивает подсборку, вам необходимо проверить каждую несопоставленную кромку в подсборке.
Вариант 2 более сложный и реалистичный. Вариант 1 можно еще больше упростить, исключив вращение деталей и сделав для каждой детали первоначальный угол.