Головоломки > Программы симуляторы головоломок
Симуляторы Головоломок от Grigorusha - Гераниумы, Венгерские кольца, Перевертыши
grigr:
Я создал небольшую коллекцию симуляторов для разных вариаций Перевертышей
1) Перевертыши - кубики
https://github.com/grigorusha/RollingCubes
2) Перевертыши - пирамидки
https://github.com/grigorusha/RollingPyramids
3) Симметрия - пирамидки из шариков
https://github.com/grigorusha/RollingSymmetry
grigr:
4) Симулятор Венгерских колец и всех их аналогов
https://github.com/grigorusha/Hungarian-Rings
https://sourceforge.net/projects/hungarianrings/files/
grigr:
Я закончил работу над симулятором колец. теперь здесь есть инсталлятор и более 50 головоломок.
1. я ускорил запуск и сделал splash screen.
2. теперь вы можете вращать кольца, если потянуть за шарик.
3. я сделал более красивое отображение головоломок с орбитами.
4. во всех головоломках есть плавное вращение и подсветка контуров.
5. теперь есть два режима подсказки для решения.
https://github.com/grigorusha/Hungarian-Rings
https://sourceforge.net/projects/hungarianrings/files/
grigr:
Я решил опубликовать первую версию 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:
инструкция по составлению скриптов (на английском)
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,7
--- Конец кода ---
--- Код: ---HideAllParts
--- Конец кода ---
сделайте это для заданного списка частей или для всех частей сразу
--- Код: ---ShowParts: 2,3,4,7
--- Конец кода ---
--- Код: ---ShowAllParts
--- Конец кода ---
обратная процедура восстанавливает отображение деталей
--- Код: ---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)
--- Конец кода ---
чтобы узнать номера деталей, нужно включить отображение автоматических цифровых маркеров.
--- Код: ---AutoMarker
--- Конец кода ---
--- Код: ---AutoMarker: 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\
Навигация
Перейти к полной версии