Автор Тема: Симуляторы Головоломок от Grigorusha - Гераниумы, Венгерские кольца, Перевертыши  (Прочитано 3215 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Онлайн grigr

  • Глобальный модератор
  • *****
  • Сообщений: 5 256
  • Пол: Мужской
  • кручу-верчу
    • Мой Магазин
Я создал небольшую коллекцию симуляторов для разных вариаций Перевертышей

1) Перевертыши - кубики
https://github.com/grigorusha/RollingCubes




2) Перевертыши - пирамидки
https://github.com/grigorusha/RollingPyramids





3) Симметрия - пирамидки из шариков
https://github.com/grigorusha/RollingSymmetry

« Последнее редактирование: 07 августа 2023, 12:17:26 от grigr »

Онлайн grigr

  • Глобальный модератор
  • *****
  • Сообщений: 5 256
  • Пол: Мужской
  • кручу-верчу
    • Мой Магазин
« Последнее редактирование: 06 мая 2023, 18:45:25 от grigr »

Онлайн grigr

  • Глобальный модератор
  • *****
  • Сообщений: 5 256
  • Пол: Мужской
  • кручу-верчу
    • Мой Магазин
Я закончил работу над симулятором колец. теперь здесь есть инсталлятор и более 50 головоломок.

1. я ускорил запуск и сделал splash screen.
2. теперь вы можете вращать кольца, если потянуть за шарик.
3. я сделал более красивое отображение головоломок с орбитами.
4. во всех головоломках есть плавное вращение и подсветка контуров.
5. теперь есть два режима подсказки для решения.

https://github.com/grigorusha/Hungarian-Rings
https://sourceforge.net/projects/hungarianrings/files/






Онлайн grigr

  • Глобальный модератор
  • *****
  • Сообщений: 5 256
  • Пол: Мужской
  • кручу-верчу
    • Мой Магазин
Я решил опубликовать первую версию Geraniums Pot - Intersecting circles puzzles simulator. вы уже можете попробовать 40 интересных головоломок.
Пока еще в программе много ошибок. также у меня много планов, чтобы добавить еще больше функций и разных головоломок.
 
https://github.com/grigorusha/GeraniumsPot

ps
если кто-то хочет помочь создавать скрипты для головоломок, напишите здесь. я сделаю небольшую инструкцию. или вы можете попробовать разобраться самостоятельно.
скрипты очень простые. в большинстве случаев вам нужно только задать координаты кругов и угол поворота. вот небольшой пример

Name: Rashkey v3
# ring number, center coordinates x y, radius, angle
Ring: 1,  50, 50, 50,  90
Ring: 2, 100, 50, 50,  90

AutoCutParts: Random, 60
AutoColorParts: 5, 3, 6

также есть много дополнительных функций для удаления частей, выборочной раскраски деталей, установки цифровых маркеров, задания различных углов и тд


Онлайн grigr

  • Глобальный модератор
  • *****
  • Сообщений: 5 256
  • Пол: Мужской
  • кручу-верчу
    • Мой Магазин
инструкция по составлению скриптов (на английском)
https://twistypuzzles.com/forum/viewtopic.php?p=424334#p424334

---------------------------------------------------------------

Небольшая инструкция по созданию скриптов:
(Скорее всего буду что-то менять и дорабатывать)


Для инициализации головоломки нужно сделать несколько команд:
Name: Rashkey v1
Author: Oleg Raschkov
Link: https://twistypuzzles.com/app/museum/museum_showitem.php?pkey=1447
Scale: 3
Speed: 4
Flip: y
Может быть несколько команд Link. Команда «Перевернуть» может иметь несколько параметров «x, y, xy, Rotate»,
если вы хотите добавить фотографию головоломки, поместите файл jpg в папку «Фото» с тем же именем, что и в параметре «Имя».

# Variables
Param: pos_ring, 50+35*sqrt(3) # 110.62177827
Param: angle, 360/7 # 51.42857143

# ring number, center coordinates x y, radius, angle
Ring: 1,  50, 50, 50, 60
Ring: 2, 120, 50, 50, (100,60,100,100)
Ring: 3,  85, pos_ring, 50, angle
Ring: 4,  85, 50+35*sqrt(3) , 50, 360/7
вы можете установить любое количество вычисляемых переменных. также формулы можно задавать сразу внутри параметров
доступные функции: pi, sqrt, cos, sin, tan, acos, asin, atan, exp, pow, radians, degrees, hypot

вы также можете установить столько колец, сколько захотите. последний параметр Angle задается в градусах.
для некоторых головоломок можно задать вложенный массив углов, их сумма должна равняться 360 градусам

# new ring number, source ring number, rotate-command, radius, angle
CopyRing: 4, 2, 3R3, 50, 60
CopyRing: 5, 1, (3,120), 50, 60
Если вы хотите создать новое кольцо, используя параметры уже определенных колец. Вы можете скопировать их, используя команды поворота.

# ring number, center coordinates x y, radius, -, type (1)
Ring: 3, 50, 50, 50, 0, 1
CopyRing: 4, 2, 1R, 50, 0, 1
иногда вам понадобятся невидимые кольца, чтобы вырезать некоторые детали.
при создании таких колец (angle=0,type=1) детали внутри них образовываться не будут.
в параметре Angle можно указать углы, тогда части в этом круге можно вращать во время генерации головоломки, но круг все равно будет отключен во время игры

# ring number, center coordinates x y, radius, -, type (2)
Ring: 3, 50, 50, 50, 0, 2
CopyRing: 4, 2, 1R, 50, 0, 2
это также дополнительное невидимое кольцо (angle=0,type=2), здесь все работает также как с предыдущими кольцами (type=1)
если это кольцо вложено внутрь другого (концентрические крэйзи кольца), тогда оно имеет особое свойство - во время игры все части внутри этого кольца не будут поворачиваться.
получается пончик, внешние части большого кольца будут вращаться, а внутренние части нет.

иногда нужно удалить заданные ранее кольца
RemoveRings: 1,10вам нужно быть осторожным, чтобы в дальнейшем коде не было ссылок на номера удаленных кругов

ShowHiddenCirclesпо умолчанию симулятор не подсвечивает кольца которые невозможно повернуть. данный флаг отключает эту проверку

Круги головоломки, из которых будут создаваться детали после разрезов, появляются при запуске самой первой команды AutoCutParts.
Если вы сделаете второй раздел с помощью команд «Кольцо», после создания первых кругов. Вам придется скопировать детали в новые круги или запустить данную команду
MakeCircles: 3,4
затем вы можете запустить команду для автоматического или ручного разделения кругов на части

AutoCutParts- эта команда сделает минимальное разделение кругов без их поворотов


AutoCutParts: Random, 150- эта команда запустит случайное вращение, которое должно разбить головоломку на части.
для более крупных головоломок нужно увеличить второе число, но это увеличит время открытия скрипта.
этот параметр подбирается экспериментально


AutoCutParts: 1R,1R,1R, 2L,2L,2L, 3R2эта команда запускает генератор их заранее заданных ходов, чтобы сделать нарезку круга вручную: это работает намного быстрее, чем параметр Random,
первое число — это номер круга из тега Ring. затем идет буква L или R (сделать поворот на 1 шаг, равный заданному углу).
параметр может иметь третье число – это возможность сразу совершить поворот на несколько шагов.

AutoCutParts: (1R),3, (2L,4R),3, 3R2вы можете использовать более короткую запись, указав, сколько раз повторять последовательность.
вложенные круглые скобки не будут работать


AutoCutParts: (Random,150,3), 1R,1R,1R, 2L,2L,2L, 3R2вы можете комбинировать выполнение команды Random и некоторые движения вручную.
Вы можете добавить третий параметр к команде Random, это инициализация зерна для встроенной функции Random.


AutoCutParts: (1L, 3L2, 1R), (1L, 3R2, 1R, 2), (1L, 2R2, 1R, 1,3) Если вы хотите точно настроить начало резки своих кругов, попробуйте этот формат записи.
будет выполнена та последовательность вращений, которую вы зададите в скобках, но начало процедуры резки начнется только в самом конце. таким образом вы сможете вращать некоторые детали, не разрезая их.
если в конце последовательности числовых параметров нет, то процедура резки начнется с использованием всех кругов.
если в конце будут числовые параметры, то резка начнется только с использованием заданных кругов,

если вы хотите просто вращать круги, не запуская процедуру резки
AutoCutParts: (1L, 2R2, 1R, 0)
если вы хотите повернуть круг на заданный угол в градусах, используйте этот формат
AutoCutParts: (1,36), (2,-72)
вы можете использовать вложенные скобки, чтобы упростить многие последовательности
AutoCutParts: ( (1R),5, (2,36) ),3

RotateCircles: 1R3, 2L
RotateCircles: (1R,2L),3
RotateCircles: (1,60),(2,-72)
Чтобы повернуть все части внутри круга, без запуска процедуры нарезки, используйте эту команду


Иногда нужно начать резать по заданным кругам, не вращая детали.
CutCircles: 1,3


индексы всех предопределенных цветов
# colors: 0 white, 1 black, 2 gray, 3 red, 4 green, 5 blue, 6 yellow, 7 purple
# colors: 8 teal, 9 orange, 10 light blue, 11 pink, 12 brown, 13 lilac, 14 lime

вы можете автоматически раскрасить все части с помощью этой команды
AutoColorParts: 2, 3если для головоломки с двумя кругами указать только два цвета - программа раскрасит два круга, а цвет пересечения кругов будет рассчитан автоматически

AutoColorParts: 2, 3, 4но вы можете указать третье число для цвета пересечения.


Эту команду можно использовать для указания цвета отдельных частей.
SetColorParts: 12,6, 8,3здесь вы указываете пары чисел. первое число — номер детали, второе число — индекс цвета.

SetColorParts: (1,8,25),3,   (2,10,29),6,  3,4сначала вы указываете номера деталей во вложенном массиве, а затем указываете индекс цвета,


также можно раскрасить заданные круги.
SetColorCircles: 1,6, 2,3здесь вы указываете пары чисел. первое число — номер круга, второе число — индекс цвета.
вы можете указывать круги в произвольном порядке.
SetColorCircles: (2,4),4, (1,2,3,4),0если вы хотите раскрасить только те части, которые находятся в области пересечения нескольких кругов, то укажите в скобках все эти круги


с помощью этой команды вы можете удалить некоторые детали
RemoveParts: 56,58просто перечислите все номера деталей.

это команда для копирования частей
CopyParts: (1,2,5), 1R2
CopyParts: (3,4), (1,60),  (6,7),(2,-120)
просто перечислите все номера деталей и дайте команду повернуть.

почти то же самое, если нужно переместить детали без копирования
MoveParts: (1,2,5), 1R2
MoveParts: (3,4), (1,60),  (6,7),(2,-120)

Команда для зеркального отражения (с копированием) частей относительно заданной линии:
MirrorParts: (1,2,3), (50,50, ring_x,ring_y)

Иногда вам нужно временно скрыть некоторые части, а затем показать их снова. Это необходимо для того, чтобы на них не повлияли процедуры обрезки.
HideParts: 2,3,4,7HideAllParts
сделайте это для заданного списка частей или для всех частей сразу
ShowParts: 2,3,4,7ShowAllPartsобратная процедура восстанавливает отображение деталей

InvertAllPartsвы можете изменить значение флага отображения для всех частей


во всех командах где есть списки с номерами частей вы можете указывать диапазон - 15..20. это эквивалентно - 15,16,17,18,19,20
CopyParts: (1..5), 1R

Иногда внутри пазла остается много микрочастиц, имеющих площадь менее одного пикселя, их лучше удалить.
RemoveMicroParts: 1Укажите эту команду. параметр — минимальная площадь.
Вы также можете автоматически удалять более крупные детали, если, например, укажете минимальную площадь 100.


если вы хотите повернуть построенный пазл, используйте эту функцию
RotateAllParts: x,y,angle
RotateAllParts: Angle

иногда после процедуры удаления или копирования деталей будет удобно отсортировать и перенумеровать все детали так, чтобы все маркеры шли слева направо и сверху вниз
Renumbering
При создании скриптов нужно понимать что функция Renumbering вызывается автоматически после некоторых команд.
она вызывается во время работы AutoCutParts, RotateCircles, CutCircles. Если вы хотите отключить автоматический запуск функции Renumbering, используйте команду:
RenumberingAuto: 0

если вы хотите связать несколько колец с помощью шестереночной передачи, вам нужно использовать специальные команды
Linked: 2,-3
Linked: (2,4), (1,-6,-5)
если в группе числа имеют одинаковый знак, тогда круги вращаются в одну сторону. если противоположный знак, тогда круги вращаются в разные стороны.

также вам нужно обязательно задать передаточное число у всех указанных кругов в команде Linked
# ring number, center coordinates x y, radius, angle, type, gear ratio
Ring: 2, 50, 0, 50, 120, 0,12
# ring number, source ring number, rotate-command, radius, angle, type, gear ratio
CopyRing: 5, 3, 1R, 9, 0,1, 6


если вы хотите сделать кольца с защелками в некоторых частях, используйте эту команду.
Latch: (6,8),+, 14,-, 28,-
знак после номера части указывает в каком направлении будет крутиться данный круг


если вы хотите сделать головоломку с плюнгером (ограничитель поворотов), используйте такой вариант настройки колец
Ring: 1,  0, 50, radius, (60,0,0,60)
вам нужно в список углов добавить (0,0) - это и будет ограничителем поворотов

тк в головоломках с плюнгерами часто не используется вся видимая часть круга, используйте эту команду, чтобы ограничить область видимости
Display: -190,-90,190,190
здесь вы вручную задаете координаты области видимости. автоматический расчет пропускается.


вы можете пометить некоторые части текстовыми маркерами
# part number, text marker
SetMarkerParts: (1,0)

# part number, text marker, turn angle, font size
SetMarkerParts: (2,2,0,12)

# part number, text marker, turn angle, font size, horizontal shift, vertical shift
SetMarkerParts: (2,2,0,12, 20,5)

второй параметр — произвольная текстовая строка: вы можете использовать точку, а также специальный символ новой строки \n
# part number, text marker
SetMarkerParts: (1,6)
SetMarkerParts: (2,9.)
# part number, text marker, angle, font size
SetMarkerParts: (2,Battle\nGear,0,12)
SetMarkerParts: (6,R\no\nk\ne\nt\nt\no,0,10)

чтобы узнать номера деталей, нужно включить отображение автоматических цифровых маркеров.
AutoMarkerAutoMarker: 1после того, как вы раскрасите все нужные части, вы можете удалить эту команду или установить для нее значение 0

аналогичной команды для обозначения кругов
AutoMarkerRing

если вы хотите завершить выполнение скрипта
End
--------------------------------------------------
Очень важно понимать, что все процедуры выполняются последовательно. если сначала сделать настройку цветов, а потом сортировку деталей. тогда твоя головоломка может запутаться

--------------------------------------------------------------------------------------------
вы можете добавить параметры командной строки чтобы запустить генерацию скриншотов головоломок из указанной папки.
это дает возможность проверить правильно ли формируется внешний вид головоломки, а также работает ли функция "scramble"

есть два режима запуска:
1) с параметром "test" - будут создаваться скриншоты решенной головоломки
"Geraniums Pot.exe" test path_puzzle_folder path_screenshots_folder
2) с параметром "test_scramble" - будут создаваться скриншоты решенной головоломки + scrambled puzzle
"Geraniums Pot.exe" test_scramble path_puzzle_folder path_screenshots_folder

вот пример запуска программы
"Geraniums Pot.exe" test_scramble D:\PycharmProjects\GeraniumsPot\Garden\Galen\ D:\PycharmProjects\GeraniumsPot\ScreenShots\
« Последнее редактирование: 12 февраля 2025, 14:14:24 от grigr »

Онлайн grigr

  • Глобальный модератор
  • *****
  • Сообщений: 5 256
  • Пол: Мужской
  • кручу-верчу
    • Мой Магазин
Это мое первое значимое достижение!!! эта головоломка пол года лежит у меня на столе и вдохновила сделать эту программу



Оффлайн T4r4sB

  • Постоялец
  • ***
  • Сообщений: 207
Это мое первое значимое достижение!!! эта головоломка пол года лежит у меня на столе и вдохновила сделать эту программу
Выглядит как очень сложная! Я правда сам плоские не пробовал собирать, но когда там столько доп-разрезов, то вообще непонятно с какого конца браться и какие алгоритмы тут есть. Хотя мб наличие 7 центров упрощает ситуацию. Которые с 2 кругами, те ещё сложнее, как мне кажется.

Онлайн grigr

  • Глобальный модератор
  • *****
  • Сообщений: 5 256
  • Пол: Мужской
  • кручу-верчу
    • Мой Магазин
там в этом классе есть и сложнее... особенно те что с 2мя кругами
думаю теперь у всех есть возможность их покрутить ;) и поискать алгоритмы

Оффлайн T4r4sB

  • Постоялец
  • ***
  • Сообщений: 207
думаю теперь у всех есть возможность их покрутить ;) и поискать алгоритмы
Плоский Sun Cube с двумя центрами уже можно задать?

в реале попробовал запутать Sun Cube за два центра, ну и собрать тоже за 2 центра - чёт дико сложно... Хотя без этих ограничений я его за 4 дня научился собирать без готовых формул

Онлайн grigr

  • Глобальный модератор
  • *****
  • Сообщений: 5 256
  • Пол: Мужской
  • кручу-верчу
    • Мой Магазин
что за плоский Сун куб???

Оффлайн T4r4sB

  • Постоялец
  • ***
  • Сообщений: 207
Ну типа структура разрезов как на SunCube, SunMinx и прочих с промежуточными поворотами, но конструкция плоская из двух кругов. И видимо получается по 12 положений у каждого круга. По любому так кто-то уже делал, только называлось по-другому

« Последнее редактирование: 17 августа 2023, 01:45:40 от T4r4sB »

Оффлайн Plut`on

  • Глобальный модератор
  • *****
  • Сообщений: 1 660
  • Пол: Мужской
  • коллекционер
    • мои коллекции
Есть похожая головоломка - Vitrail



Она уже занесена в эту программу.

Онлайн grigr

  • Глобальный модератор
  • *****
  • Сообщений: 5 256
  • Пол: Мужской
  • кручу-верчу
    • Мой Магазин
Ну типа структура разрезов как на SunCube, SunMinx и прочих с промежуточными поворотами, но конструкция плоская из двух кругов. И видимо получается по 12 положений у каждого круга. По любому так кто-то уже делал, только называлось по-другому
такое сделать легко ))) я не хочу пока что добавлять в программу виртуальные конструкции, тк их можно сотни сходу на придумывать...
если решишь освоить скриптописание. то подскажу что и как на примере этой

Оффлайн T4r4sB

  • Постоялец
  • ***
  • Сообщений: 207
я не хочу пока что добавлять в программу виртуальные конструкции, тк их можно сотни сходу на придумывать...
Ну это логично...
Цитировать
виртуальные конструкции
Это можно исправить, если Pluton заинтересуется) Увы, мне пока далеко до создания подобного в реале

Онлайн grigr

  • Глобальный модератор
  • *****
  • Сообщений: 5 256
  • Пол: Мужской
  • кручу-верчу
    • Мой Магазин
как то так. 5 мин )))




Name: T4r4sB

Scale: 3
Speed: 4
Flip: y

# ring number, center coordinates x y, radius, angle
Ring: 1, 50, 50, 50, 30
Ring: 2, 125, 50, 50, 30

AutoCutParts: 1R2,1R2,1R2,1R2,1R2,1R2, 2R2,2R2,2R2,2R2,2R2,2R2, 2R,2R2,2R2,2R2,2R2,2R2,2R, 1R,1R2,1R2,1R2,1R2,1R2,1R
AutoCutParts: 1R2,2R,2L2,2R, 1R2,2R,2L2,2R, 1R2,2R,2L2,2R, 1R2,2R,2L2,2R, 1R2,2R,2L2,2R
AutoCutParts: 2R2,1R,1L2,1R, 2R2,1R,1L2,1R, 2R2,1R,1L2,1R, 2R2,1R,1L2,1R, 2R2,1R,1L2,1R
AutoColorParts: 3, 4, 5

# colors: 0 white, 1 black, 2 gray, 3 red, 4 green, 5 blue, 6 yellow, 7 purple
# colors: 8 teal, 9 orange, 10 light blue, 11 pink, 12 brown, 13 lilac, 14 lime
« Последнее редактирование: 22 августа 2023, 00:27:41 от grigr »