Головоломка Пентамино

18.04.23

Задачи пользователя - Игры

Широко известная головоломка, основанная на составлении фигур из составных частей. В данной реализации в качестве фигуры используется прямоугольник, а в качестве составных частей - пентамино, тетрамино или гексамино. Реализованы классические варианты головоломки и вариант со случайной генерацией фигур.

Скачать исходный код

Наименование Файл Версия Размер
Головоломка Пентамино:
.erf 21,92Kb
6
.erf 21,92Kb 6 Скачать

Об игре

Пентамино - фигура, состоящая из пяти квадратов, соединенных сторонами. Является частным случаем полимино. Другие разновидности полимино - тетрамино и гексамино, из, соответственно, четырех и шести квадратов. В процессе игры необходимо набор фигур "уложить" в прямоугольник заданного размера. Сделать это, зачастую, весьма непросто!

 
 Пример игры

Управление:

1. с помощью мыши:

  • "захват" и "освобождение" фигуры - клик мышью в клетку фигуры
  • перемещение - клик в другую клетку поля
  • поворот и отражение фигуры - кнопки командной панели

2. с помощью клавиатуры:

  • "захват" и "освобождение" фигуры - <enter> в выделенной ячейке - клетке фигуры
  • перемещение - <стрелки клавиатуры>
  • поворот фигуры - клавиши <A> и <Z>
  • отражение фигуры - клавиши <S> и <X>

Всего может быть 12 различных фигур пентамино. Из них можно сложить прямоугольники (площадью 60 квадратов): 6×10, 5×12, 4×15 и 3×20. Из полного набора гексамино (35 возможных фигур) или тетрамино (5 фигур) сложить какой-либо прямоугольник нельзя, но это можно сделать, взяв неполный набор, или добавив к набору дополнительные фигуры. Разумеется, прямоугольники можно складывать из произвольного набора фигур, в том числе повторяющихся. В игре реализованы классические головоломки пентамино 6×10, 5×12, 4×15 и 3×20, тетрамино 4×6, а также, самый интересный, пользовательский вариант.

В пользовательском режиме можно выбрать: вид фигуры (тетрамино, пентамино или гексамино), размер поля-прямоугольника (а значит, и количество фигур) и сложность. Сложность определяет возможность использовать повороты и отражения фигур. Набор фигур генерируется случайным образом. 

Генерация фигур

Вот как раз генерация набора фигур - самая интересная и сложная задача. В чем сложность? А в том, что у головоломки обязательно должно быть решение, т.е. все фигуры гарантированно должны поместиться в прямоугольник. Как этого добиться? Ну, во-первых, можно попытаться математически доказать разрешимость головоломки при заданном наборе фигур. Я не знаю как это сделать:), кто захочет - может попробовать. Во-вторых можно написать алгоритм, "решающий" эту задачу, это тоже весьма интересно. Но я пошел по третьему пути - от обратного, т.е. не составлять прямоугольник, а наоборот, случайным образом разбить исходный прямоугольник на составные части заданного размера. Расскажу поподробнее.

1. Генерация начинается со случайной расстановки "затравок" - по одной клетке от каждой фигуры:

2. Далее фигуры начинают "расти", к фигурам добавляются новые клетки из числа еще не занятых:

3. Возможна ситуация, когда фигуре расти некуда - все соседние клетки уже заняты. Например, для красной фигуры:

4. Единственный выход - красная должна "отобрать" клетку у другой фигуры. Какую угодно отбирать нельзя. Знаком "+" помечены "критические" клетки - те, без которых фигура разваливается на несвязанные части. Их трогать запрещено.

Здесь красная фигура "отобрала" клетку у оранжевой, а оранжевая - у красной.

5. Далее красная фигура "отбирает" клетку у синей, и синяя восстанавливается до нужного размера.

 

Как видим, итераций до окончания может пройти достаточно много, до нескольких десятков (зависит от количества фигур). Но насколько надежен этот алгоритм? Можно ли быть уверенным, что он всегда завершиться с нужным результатом? К сожалению ,нет.

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

Решением этой проблемы служит автоматический перезапуск алгоритма после некоторого числа итераций, например 100.

 

Головоломка тестировалась в тонком клиенте 8.3.22.1709.

Как всегда, приветствуются замечания / дополнения / комментарии.

 

    

 
 Некоторые из прочих моих публикаций  

   

Игра головоломка пентамино тетрамино гексамино

См. также

Пасьянс Паук

Игры Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Классическая игра пасьянс Паук, на платформе 1С.

15.04.2024    590    29    user1693438    1    

7

Классическая игра "Змейка" на 1С (управляемые формы)

Игры Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Бесплатно (free)

Игра "Змейка" в классическом варианте на управляемых формах в 1С. Собирайте яблоки и ставьте рекорд!

09.02.2024    2889    160    emilyabochkova    12    

24

Ключворды в 1С

Игры Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Создавайте новые ключворды или разгадывайте существующие.

1 стартмани

05.02.2024    1634    1    alexpvs    0    

6

Игра "5 букв"

Игры Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Игра "5 Букв", сделанная на 1С. В игре загадано слово, существительное в единственном числе. Нужно отгадать загаданное слово.

1 стартмани

29.12.2023    1091    2    APTEM_SLV    9    

7

Пятнашки

Игры Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Цель - обучение хитростям нашей всеми любимой 1С.

28.11.2023    898    34    user1834118    0    

6

Кар магедон

Игры Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

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

01.11.2023    1758    38    user1834118    7    

11

Турнир по 1С. Танки на СКД

Игры Платформа 1С v8.3 Абонемент ($m)

Предлагаю свою версию турнира. Особенность этого турнира в том, что тут нет правильных или неправильных решений. Есть твое решение и решение твоих соперников. У кого решение лучше тот и победит.

1 стартмани

09.10.2023    1826    1    opx    1    

13

Плоский "Кубик Рубика"

Игры Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Вы можете собрать кубик Рубика? Я - только с помощью инструкции:). Попробуйте справиться с его плоским аналогом.

1 стартмани

29.05.2023    2079    7    Alxby    3    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 750 18.04.23 18:50 Сейчас в теме
Норм! Но с визуализацией в 1с всё печально.
+
2. Alxby 1144 18.04.23 19:23 Сейчас в теме
(1)Это точно. Проблемы в общем-то две: мало возможностей графического изображения элементов (спрайтов и т.п.) и низкая скорость отрисовки - сделать хотя бы PacMana только средствами 1С не выйдет.
mrChOP93; aSHA-1; +2
3. Adrenal1n 3 24.04.23 13:17 Сейчас в теме
(2) На самом деле сделать пакмэна не получится в первую очередь потому что нет игрового шага, другим языком нет таймера. Будь таймер - можно было на табличном документе перемещать картинку и получать анимацию. Обработчик ожидания, как самый похожий механизм все равно не подходит, потому что работает только во время бездействия системы. Другой вопрос, что это все (включая саму игру) на самом деле и не нужно в реальном мире и делается просто ради забавы.
Alxby; +1
4. Alxby 1144 24.04.23 15:36 Сейчас в теме
(3)Это тоже. Но я имел в виду именно скорость отрисовки - в пакмане персонажи двигаются с разными скоростями, т.е. скорость отрисовки должна позволить эту разницу увидеть. Я пробовал в табличном документе просто перемещать спрайт, даже без обработчика ожидания, - результат неудовлетворительный. А если говорить о забавах - так они - существенная часть реального мира, игроделы там делают реальные деньги))).
+
5. leosoft 165 29.05.23 13:13 Сейчас в теме
Здравствуйте! У меня почему-то не активны все кнопки (поворот и далее).
Активна только новая игра.
+
6. leosoft 165 29.05.23 13:17 Сейчас в теме
(5) Включил вариант пентамимо - появились! Интересная игрушка, спасибо!
+
8. Alxby 1144 29.05.23 19:12 Сейчас в теме
(5) Возможность поворота зависит от сложности - с поворотами сложнее.
+
7. leosoft 165 29.05.23 13:45 Сейчас в теме
А если случайно куда-то переместил фигурку - есть кнопка или горячая клавиша "отката"?
+
9. Alxby 1144 29.05.23 19:14 Сейчас в теме
(7)Нет, да она и не нужна. В любой момент фигуру можно переместить обратно. Это же не шашки/шахматы - сходил не туда - и всё, мат.
+
Оставьте свое сообщение