Как сделать прямоугольник из тетриса. Распечатай и играй. Настольные игры. — С каким чувством вы уезжали из России

“Пентамино” - одна из самых популярных мировых головоломок, пик популярности пришелся на конец 60-х годов. Сама игра подробно описывалась в журнале “Наука и жизнь”. В эту головоломку могут играть и дети и взрослые.

Запатентовал головоломку “Pentomino” Соломон Вольф Голомб , житель Балтимора, математик и инженер, профессор университета Южная Калифорния. Игра состоит из плоских фигур, каждая из которых состоит из пяти одинаковых квадратов, соединённых между собой сторонами, отсюда и название. Существуют еще версия головоломок Тетрамино, состоящие из четырех квадратов, от этой игры и произошел известный Тетрис.

Элементы Пентамино

Игровой набор “Пентамино” состоит из 12 фигурок. Каждая фигура обозначается латинской буквой, форму которой она напоминает. При решении задач и головоломок фигурки можно вертеть и переворачивать, поэтому при изготовлении игры своими руками элементы делайте двухсторонними.

Популярные головоломки

Игры и игрушки на основе Пентамино

Сейчас в интернет магазинах можно найти игры и головоломки, сделанный на основе элементов Пентамино.

Пентамино своими руками

Предлагаем сделать элементы игры из плотного картона или пластика и обклеить цветной бумагой или клеящейся пленкой. Внизу представлен вариант изготовления из картона.

  • Рисуем каждый элемент на твердом картоне или пластике. Рисовать лучше, каждый элемент по отдельности, не складывая в прямоугольник - так вырезать будет легче.
  • Вырезаем первую фигуру “U”, перепроверяем размеры. Далее вырезаем все остальные элементы, проверяя чтобы они спокойно входили в элемент “U” своими выпуклыми частями. Подрезаем, если надо лишнее. На фотографии показаны элементы с размером квадратного модуля 2,5 х 2,5 сантиметра.
  • Обводим готовый картонный элемент на сложенной вдвое цветной бумаге и вырезаем сразу две цветные детали. Лучше цветные детали делать чуть меньше, чем картонные, и приклеиваются лучше, и края не будут отклеиваться от частого использования.
  • Находим коробочку для хранения деталей, куда потом будем складывать также схемы и задания к игре. Схемы можно распечатывать на сайте, а можно рисовать и раскрашивать на тетрадном листе в клеточку.

Применим технологию ООП для программирования игры.

Используем уже известную нам по программе «Жизнь» консольную графику, основанную на управляющих escape-последовательностях. Но, в отличие от программы «Жизнь», откажемся от непосредственного управления терминалом (команды print , печатающие на терминал трудно запоминаемые escape-последовательности), и положимся на библиотеку, которая делает всю эту работу за нас, предоставляя нам удобный набор процедур.

Раз уж мы решили применить ООП для решения нашей задачи, продумаем объектную модель игры.

Полезно будет отделить в программе ту часть, которая отвечает за пользовательский интерфейс (графика, работа с клавиатурой и звук). Для этой цели предусмотрим пакет процедур Tetris::UI (User Interface ). Такое отделение будет полезно в случае, если мы в дальнейшем захотим усовершенствовать пользовательский интерфейс, например, использовать вместо скромной, консольной, полноценную графику, X Window System. Тогда нам придётся внести изменения лишь в текст модуля Tetris::UI вместо того, чтобы отыскивать по всему тексту программы вызовы графических процедур или процедур для работы с клавиатурой.

Можно пойти ещё дальше - предусмотреть в программе несколько вариантов пользовательского интерфейса, на выбор, в зависимости от ключей в командной строке. Для каждого из вариантов пользовательского интерфейса можно создать свой пакет процедур, например, Tetris::UI::Term::Slangy для консольной графики и Tetris::UI::X11 для полноценной. Оба пакета будет содержать один и тот же набор процедур (ядро), так что остальная часть программы будет «общаться» с пакетом только через это ядро одним и тем же способом. Кроме того, если это понадобится, каждый из этих пакетов можно дополнить другими, вспомогательными процедурами и переменными, специфическими для данного типа интерфейса. Остальная часть программы будет обращаться к ядру пакета, отвечающего за интерфейс, даже не зная, какой тип интерфейса он реализует.

Но пока не будем браться за всё сразу, а реализуем простой пользовательский интерфейс на основе консольной графики в пакете Tetris::UI . Содержимое пакета обсудим позднее.

Есть несколько библиотек, которые упрощают работу с консольной графикой. Наиболее популярными из них являются libncurses и libslang . Их возможности примерно одинаковы, однако в настоящее время libncurses испытывает определённые трудности, если терминал работает с кодировкой UTF-8 , которая даёт возможность одновременно вводить и выводить символы из всех национальных алфавитов, используя всю таблицу символов UCS (большой файл!). Различные символы в кодировке UTF-8 имеют различную длину (в байтах), что пока сбивает с толку библиотеку libncurses . Не дожидаясь, когда ошибки в этой библиотеке будут исправлены, воспользуемся библиотекой libslang , которая не испытывает подобных трудностей.

Обе эти библиотеки написаны на языке C, и предназначены для использования в программах, написанных на C. Чтобы применить возможности таких библиотек в программах, написанных на других алгоритмических языках, требуются дополнительные ухищрения. Мы приспособили библиотеку libslang для использования в Perl, создав пакет процедур Term::Slangy . Этот пакет должен быть установлен на компьютере.

Пользователи операционной системы Mandriva Linux версий 2010.0 и 2010.1 могут скачать пакет RPM и установить его при помощи команд:

% su Password: *пароль суперпользователя* # rpm -vhi perl-Term-Slangy-323.0.0-1tz2010.0.i586.rpm Подготовка... ########################################### 1:perl-Term-Slangy ###########################################

Для его использования в программе нужно включить в текст команду

Perl

use Term::Slangy;

После этого станут доступны процедуры из этого пакета. Обсудим их подробнее.

InitTT()

Эта процедура обязательно должна вызываться перед началом использования консольной графики. Она определяет размер терминала (количество строк и столбцов), узнаёт тип терминала и отыскивает в базе данных terminfo, какие управляющие escape-последовательности отвечают каким управляющим действиям.

termTT()

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

rows()
cols()

Процедуры возвращают размер терминала - количество строк и столбцов соответственно.

utf8Mode( $mode )

Включает поддержку кодировки UTF-8 . Если $mode равен -1 , этот режим будет установлен, если терминал настроен на использование этой кодировки. Как правило, именно это и требуется. Вызов данной процедуры должен предшествовать вызову initTT() .

clear()

Процедура очищает экран. Видимые изменения наступят лишь после вызова процедуры refresh() .

cursorVisibility( $mode )

Изменяет вид курсора в зависимости от $mode : при 0 курсор становится невидимым, при 1 - видимым. Изменения проявятся после вызова refresh() .

move( $row , $column )

Перемещает курсор в точку экрана с координатами ( $column , $row )

writeString( $string )

Выводит строку $string в текущем положении курсора. Курсор сдвигается. Изменения проявятся после вызова refresh() .

writeChar( $char )

Выводит символ $char в текущем положении курсора. $char - целочисленный номер символа из таблицы символов UCS . Курсор сдвигается. Изменения проявятся после вызова refresh() .

fillChar( $row , $col , $height , $width , $char )

Заполняет символом $char прямоугольную область экрана. Левый верхний угол прямоугольника в точке экрана с координатами ( $row , $col ), высота и ширина - $height и $width . Изменения проявятся после вызова refresh() .

hLine( $row , $col , $width , $char )
vLine( $row , $col , $height , $char )

Заполняет символом $char горизонтальную и вертикальную линию, начиная от точки с координатами ( $row , $col ). Соответственно ширина и высота линии - $width и $height . Изменения проявятся после вызова refresh() .

colorPair( $color , $foreground , $background )

Определяет цветовую пару (передний план, фон) и присваивает ей номер $color . Передний план - $foreground , фон - $background . Чтобы не запоминать значения параметров $foreground и $background , в классе определены константы, приведённые в таблице:

название цвета цвет значение параметра
чёрный COLOR_BLACK
красный COLOR_RED
зелёный COLOR_GREEN
коричневый COLOR_BROWN
синий COLOR_BLUE
фиолетовый COLOR_MAGENTA
циан COLOR_CYAN
светло-серый COLOR_LGRAY
серый COLOR_GRAY
ярко-красный COLOR_BRIGHT_RED
ярко-зелёный COLOR_BRIGHT_GREEN
ярко-жёлтый COLOR_BRIGHT_BROWN
ярко-синий COLOR_BRIGHT_BLUE
ярко-фиолетовый COLOR_BRIGHT_MAGENTA
яркий циан COLOR_BRIGHT_CYAN
ярко-белый COLOR_BRIGHT_WHITE

Процедуры, использующие цвета, должны ссылаться на них по номеру $color .

fillColor( $row , $col , $height , $width , $color )

Заполняет цветом $color прямоугольную область экрана. Левый верхний угол прямоугольника в точке экрана с координатами ( $row , $col ), высота и ширина - $height и $width . Изменения проявятся после вызова refresh() .

setColor( $color )

Делает цвет $color текущим. Дальнейшее рисование осуществляется этим цветом.

initKeypad()

Эта процедура должна вызываться перед вызовами процедур, работающих с клавиатурой.

refresh()

Эту процедуру следует вызвать каждый раз, когда нужно сделать видимыми результаты работы «рисующих» процедур.

getKey()

Останавливает программу в ожидании нажатия клавиши. Как только клавиша нажата, возвращает номер введённого символа из таблицы символов UCS .

inputPending( $msec )

Процедура ожидает нажатия клавиши в течение $msec миллисекунд. Если за этот период клавиши не нажимались, возвращает 0 . Иначе завершается немедленно после нажатия, возвращая 1 .

Нам потребуются три системы декартовых координат (). Одна (красная) связана с экраном, её начало будет находиться в левом верхнем углу экрана. Другая (жёлтая) - со стаканом, с началом в его левом верхнем углу. И, наконец, третья, зелёная, будет связана с текущей фигурой. Начало последней системы координат разместим в левом верхнем углу прямоугольника с вертикальными и горизонтальными сторонами, описанного около фигуры.


Первая координатная система нужна, поскольку рисовальные процедуры из пакета Term::Slangy используют именно её. Перемещения фигуры внутри стакана удобнее отсчитывать по отношению к стакану, для этого потребуется вторая. Наконец, для рисования самой фигуры удобнее задавать положения квадратов, из которых она составлена, относительно какой-нибудь выделенной точки в фигуре, на роль которой просится левый верхний угол её описанного прямоугольника.

Будем рассматривать фигуры тетриса как объекта класса Tetris::Figure .

В начале работы программы создаются семь фигур и размещаются в массиве. Затем происходит следующее. Из массива фигур выбирается случайным образом одна - «текущая». Она размещается в верхней части стакана и начинает своё падение, отзываясь на нажатия клавиш управления. Как только текущая фигура утратит возможность сдвигаться вниз, фигура становится набором клеточек на дне стакана. Однако она не прекращает своего существования и ждёт своего часа в массиве фигур, пока снова не выпадет случайно её номер.

Под действием управляющих клавиш фигура может сдвигаться вправо/влево, поворачиваться на 90° в обе стороны, или упасть на дно стакана. В отсутствие нажатий в течение определённого времени фигура сдвигается вниз, пока это возможно. Следует учесть, что все описанные сдвиги и повороты выполняются только в пределах стакана, причём таким образом, чтобы фигура не перекрывала клеточки, уже находящиеся на дне стакана. Если клеточки или границы стакана мешают выполнить манёвр, ничего не происходит.

Данные объекта $figure класса Tetris::Figure включают информацию о форме фигуры и её цвете. Такие разнородные сведения удобно хранить в ассоциативном массиве с ключами shapes (форма) и color (цвет).

Поскольку фигуры не обладают самостоятельной способностью нарисоваться на экране (обязанность рисовать возложена на класс Tetris::UI), просто пронумеруем цвета числами и разместим эти числа как значения, отвечающие ключу color . Класс Tetris::UI разберётся, как сопоставить эти номера реальным цветам, используемым при рисовании.

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

Вместо вычислений форм фигуры, получающихся при поворотах, мы для каждой фигуры создадим массив, содержащий всё такие её формы. Ссылку на этот массив разместим как значение, отвечающее ключу shapes . Самый первый (имеющий индекс 0) элемент массива содержит текущую форму фигуры. При повороте влево этот первый элемент удаляется из начала массива и добавляется в конец. При вращении вправо, наоборот, удаляется последний элемент и добавляется в начало. На наше счастье некоторые фигуры обладают поворотной симметрией. Фигуры «I», «Z», «S» имеют симметрию второго порядка, поэтому их формы повторяются после двукратного поворота; их массив форм будет содержать только два элемента. Фигура «Q» имеет симметрию четвёртого порядка, и её массив форм будет состоять из единственной формы. Оставшиеся фигуры «T», «J», «L» не имеют поворотной симметрии, поэтому в их массивах форм будет по четыре элемента.

Но как закодировать ту или иную форму фигуры? Мы предлагаем не совсем обычный подход. Каждую ряд фигуры будем кодировать с помощью строки, в которой заполненные клетки изображаются символом ■ , а отсутствующие - символом □ (вместо этих символов можно взять любые другие, скажем, # и пробел). Строки, соответствующие рядам фигуры, соединяются вместе, а в качестве разделителя рядов используется символ | (см. 40.1. «Формы фигур тетриса и кодирующие их строки»). Информации, заключённой в такой строке, вполне достаточно, чтобы, к примеру, вычислить ширину и высоту фигуры.


New( $shapes , $color )

Конструктор новых фигур. Передаваемые параметры - информация о форме ($shapes) и цвете ($color) фигуры.

width()
height()

Возвращают соответственно ширину и высоту фигуры (в клеточках).

getCell( $j , $i )

Возвращает 1 , если в системе координат, связанной с фигурой («зелёной», см. рисунок 40.3. «Системы координат в программе tetris.pl »), клетка с координатами ( $j , $i ) принадлежит фигуре, и 0 в противном случае.

shape()

Возвращает текущую форму фигуры, точнее, кодирующую эту форму строку. Напомним, что это первый элемент массива форм.

rotateLeft()
rotateRight()

Поворачивают фигуру соответственно влево и вправо.

Show()
hide()

Показаться и скрыться (стать невидимой).

move( $dir )

Сдвинуться или повернуться. Параметр $dir указывает направление сдвига или поворота в соответствии с таблицей:

Данная процедура не приводит к перемещению фигуры на экране. Она всего лишь меняет её внутренние свойства (к примеру, координаты фигуры в стакане). Чтобы действительно переместить фигуру на экране, нужно вызвать процедуру showMove .

showMove( $dir )

Переместиться в соответствии с параметром $dir и показать перемещение на экране.

canMove( $dir )

Возвращает 1 , если фигура может сдвинуться или повернуться в соответствии с направлением $dir ; в противном случае возвращает 0 .

fall()

Init()

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

term()

Завершить работу пользовательского интерфейса: очистить экран, зажечь курсор, вернуть экран в первоначальное состояние.

showFigure( $fig , $x , $y , $color )

Показать фигуру $fig (объект класса Tetris::Figure) в стакане, используя «жёлтые» координаты $x и $y . Если параметр $color не указан, используется собственный цвет фигуры, в противном случае используется указанный номер цвета.

showNextFigure( $fig )

Показать фигуру $fig как следующую, то есть вне стакана, в специально предназначенном для этого месте под надписью «Следующая:».

showScore( $score )

Показать текущий счёт $score рядом с надписью «Счёт:».

showGlass()

Показать стакан.

play( $fileName )

Проиграть аудиофайл, чьё имя указано в параметре $fileName .

Текста пока нет


Пентамино - очень популярная логическая игра и головоломка одновременно. Элементы в игре - плоские фигуры, каждая из которых состоит из пяти одинаковых квадратов. Всего существуют 12 элементов пентамино, обозначаемых латинскими буквами, форму которых они напоминают (см. рисунок).

Как сделать Пентамино

Можно изготовить пентамино из кубиков, но тогда Вам нужно будет склеить и обклеить цветной пленкой 60 кубиков - трудновато. Предлагаем сделать элементы их плотного картона.

  • Рисуем каждый элемент на твердом картоне, вырезаем, проверяем, чтобы элемент входил в элемент “U”. Подрезаем, если надо лишнее. Мы рисовали детали из квадратиков 2,5х2,5 см.
  • Обводим готовый картонный элемент на сложенной вдвое цветной бумаге и вырезаем сразу две цветные детали. Лучше цветные детали делать меньше, чем картонные, и приклеиваются лучше, и углы поровнее будут.
  • Клеим клеем-карандашом цветную бумагу с двух сторон картонки.
  • Находим коробочку для хранения деталей, куда потом будем складывать также схемы и задания к игре.

Игры и задачи с Пентамино

Сложи прямоугольник.

Самая распространённая задача о пентамино - сложить из всех фигурок, без перекрытий и зазоров, прямоугольник. Поскольку каждая из 12 фигур включает в себя 5 квадратов, то прямоугольник должен быть площадью 60 единичных квадратов. Возможны прямоугольники 6×10, 5×12, 4×15 и 3×20.
Существует ровно 2339 различных укладок пентамино в прямоугольник 6×10, а вот вариантов прямоугольника 3х20 всего 2.

Один из двух способов складывания прямоугольника 3х20

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

Детям лучше тренироваться на маленьких прямоугольниках из нескольких деталей.
Вот нарисовали варианты складывания прямоугольников из трех деталей.

Сложи фигуру

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

Фигура “Утка”, сложенная по образцу.

Игры с малышами.

С малышами играть лучше совсем по другому, не стоит им давать сразу сложные задания на логику, пусть играют с пентамино как с пазлами.

  • Моя дочь (3,5 года) складывает их один в другой, ищет подходящий по цвету или форме, а в получившейся собранной фигуре ищет признаки сходства с животным или знакомым предметом. Например, если фигура похожа на слона, то можно пытается сделать хобот подлиннее или увеличить уши, а потом убрать пару элементов и превратить фигуру в мышь или еще кого-нибудь.
  • Покажите ребенку как складывать маленький прямоугольник. Потом разломайте, как будто нечаянно. Можно перед тем как сломать, обратить внимание ребенка на то, где какие детали лежат. Попросите помочь собрать его заново, а то у вас не получается.

Да, много еще игр можно придумать с пентамино, главное, что бы ребенку и вам было интересно.

Пентамино из Лего

Кстати, если у Вас дома много стандартных кирпичиков лего, то можно попробовать сделать пентамино их них. Фигурки сложенные из Лего получаться объемные, и можно будет собирать помимо обычных, плоскостных моделей, объемные фигуры.

Схема сборки достаточно простая: два ряда кирпичиков уложенные друг на друга со смещением.

Укладка прямоугольников

Самая распространённая задача о пентамино - сложить из всех фигурок, без перекрытий и зазоров, прямоугольник. Поскольку каждая из 12 фигур включает в себя 5 квадратов, то прямоугольник должен быть площадью 60 единичных квадратов. Возможны прямоугольники 6×10, 5×12, 4×15 и 3×20. Каждую из этих головоломок можно решить вручную, но более сложной задачей является подсчёт общего числа возможных решений в каждом случае. (Очевидно, прямоугольники 2×30 и 1×60 составить из пентамино невозможно, поскольку многие фигуры в них просто не помещаются по ширине.)

Для случая 6×10 эту задачу впервые решил в 1965 году Джон Флетчер . Существует ровно 2339 различных укладок пентамино в прямоугольник 6×10, не считая поворотов и отражений целого прямоугольника, но считая повороты и отражения его частей (иногда внутри прямоугольника образуется симметричная комбинация фигур, поворачивая которую можно получить дополнительные решения; для прямоугольника 3×20, приведённого на рисунке, второе решение можно получить поворотом блока из 7 фигур, или, иначе говоря, если поменять местами четыре фигуры, крайние слева, и одну крайнюю справа).

Для прямоугольника 5×12 существует 1010 решений, 4×15 - 368 решений, 3×20 - всего 2 решения (отличающихся вышеописанным поворотом). В частности, существует 16 способов сложить два прямоугольника 5×6, из которых можно составить как прямоугольник 6×10, так и 5×12.

Укладка прямоугольников из односторонних пентамино

Если дополнить набор пентамино зеркальными копиями фигур, не совпадающих со своими отражениями (F, L, P, N, Y и Z), то из полного набора в 18 односторонних пентамино можно сложить прямоугольники площадью 90 единичных квадратов (при этом фигуры не разрешается переворачивать). Задача о составлении прямоугольника 3×30 имеет 46 решений, 5×18 - более 600 тыс. решений, 6×15 - более 2 млн. решений и 9×10 - более 10 млн. решений

Укладка фигур с отверстиями

В какой-то степени более простую (более симметричную) задачу, для квадрата 8×8 с отверстием в центре 2×2, решил еще в 1958 году Дана Скотт (аспирант-математик Принстона). Для этого случая существует 65 решений. Алгоритм Скотта был одним из первых применений компьютерной программы поиска с возвратом .

Другой вариант этой головоломки - выкладывание квадрата 8×8 с 4 отверстиями в произвольно заданных местах. Большинство таких задач имеют решение. Исключением являются случаи с размещением двух пар отверстий вблизи двух углов доски так, чтобы в каждый угол можно было поместить только P-пентамино, или всех четырёх отверстий вблизи одного угла так, что при любом возможном заполнении угловой клетки (с помощью U- или T-пентамино) от доски отсекается ещё одна клетка (см. рисунок).

Для решения этих задач эффективные алгоритмы описал, например, Дональд Кнут . На современном компьютере подобные головоломки решаются за считанные секунды.

Задача об утроении фигур пентамино

Эта задача была предложена профессором Калифорнийского университета Р.М.Робинсоном. Выбрав одну из 12 фигур пентамино, необходимо построить из каких-либо 9 из 11 оставшихся пентамино фигуру, подобную выбранной, но в 3 раза бо́льшей длины и ширины. Решение существует для любого из 12 пентамино, причём не единственное (от 15 решений для Х до 497 для Р). Существует вариант этой задачи, в котором для построения утроенной фигуры разрешается использовать также и саму исходную фигуру. В этом случае число решений от 20 для Х до 9144 для Р-пентамино.

Представленное на рисунке решение , найденное А.ван де Ветерингом, обладает интересным свойством: каждое пентамино используется для утроения девяти из остальных, по одному разу в каждой. Таким образом, из 9 комплектов исходных фигур пентамино можно одновременно сложить все 12 утроенных пентамино.

Настольная игра

Пентамино может использоваться также как настольная игра для двух игроков. Для игры необходима шахматная доска 8×8 и набор фигур пентамино, клетки которых имеют одинаковый размер с клетками доски. В начале игры доска пуста. Игроки поочерёдно выставляют на доску по одной фигуре, закрывая 5 свободных клеток доски. Все выставленные фигуры остаются на месте до конца партии (не снимаются с доски и не передвигаются). Проигравшим считается игрок, который первым не сможет сделать хода (либо из-за того, что ни одна из оставшихся фигур не умещается на свободных участках доски, либо потому, что все 12 фигур уже выставлены на доску).

Анализ игры достаточно сложен (так, в начале имеется даже больше возможных первых ходов, чем в шахматах). Голомб предложил следующую стратегию: стремиться разбить свободное место на доске на два равновеликих участка (и помешать сопернику сделать это). После этого на каждый ход соперника на одном из участков следует отвечать ходом на другом.

Пример партии в пентамино показан на рисунке. Нумерация ходов сквозная (нечётные номера ходов принадлежат первому игроку, чётные - второму). Первоначально игроки делают ходы в центре доски (ходы 1–3), не позволяя друг другу разбить доску на равновеликие участки. Но затем второй игрок делает неудачный ход (4), позволяющий сопернику разбить свободное место на два участка по 16 клеток (ход 5). (В этом примере свободные участки не только равны по площади, но и совпадают по форме - симметричны относительно диагонали доски, но для стратегии это, разумеется, не обязательно.) Далее на ход второго игрока (6) на одном из этих участков первый игрок отвечает ходом на другом (7) и выигрывает. Хотя на доске ещё есть три свободных участка в пять и более клеток, но все подходящие фигуры (I, P, U) уже использованы.

Варианты настольной игры

Пентамино с заранее выбранными фигурами

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

Стратегия этого варианта игры, предложенная Голомбом, существенно отличается от стратегии обычного пентамино. Вместо того, чтобы разбить доску на равновеликие участки, игрок стремится создать на доске участки, которые можно заполнить лишь его фигурами, но не фигурами соперника. (Голомб называет такие участки «убежищами».)

Пример партии в пентамино с заранее выбранными фигурами показан на рисунке. Фигуры, выбранные первым и вторым игроками, перечислены слева и справа от доски соответственно. Зачёркнутая буква обозначает, что фигура использована для хода. Сначала игроки избавляются от самых «неудобных» фигур X и W (ходы 1 и 2). Затем первый игрок создаёт «убежище» для фигуры Y (ход 3), второй - для фигур U и P (ходы 4 и 6). В конце партии (ходы 8-10) происходит заполнение этих «убежищ» и партия заканчивается победой второго игрока - у первого остаётся Т-образное пентамино, для которого на оставшейся части доски нет подходящего места.

Другие варианты

  • «Карточное пентамино» - вариант игры с привнесением случайных событий. Фигуры пентамино (или их буквенные обозначения) рисуют на карточках, которые тасуют и раздают игрокам. Игроки выбирают фигуры в соответствии с розданными им карточками. Далее игра идёт по правилам пентамино с заранее выбранными фигурами.
  • Пентамино для четырёх игроков. Четыре игрока, сидящие по четырём сторонам доски, играют двое на двое (игроки, сидящие друг напротив друга, образуют команду). Проигравшей считается команда, игрок которой первым не сможет сделать хода. В эту игру можно играть по любому из трёх вышеописанных вариантов - обычному, с заранее выбранными фигурами или «карточному».
  • «Кто-кого?» В игре участвует от двух до четырёх игроков, но каждый из них играет только за себя. Победителем считается сделавший последний ход, ему засчитывается 10 очков. Игрок, который должен ходить после победителя (т.е. первым не сможет сделать хода) получает 0 очков, а все остальные игроки - по 5 очков. Может быть сыграно несколько партий, набранные в них очки суммируются. Игра также может проводиться по любому из трёх вышеописанных вариантов правил.

Компьютерные игры

С конца 1980-х годов неоднократно выходили различные компьютерные игры, основанные на пентамино. Наиболее известная - основанная на идее тетриса игра пентикс (Pentix). Один из новейших примеров - игра Dwice, которую разработал в году изобретатель Тетриса Алексей Пажитнов .

Примечания

См. также

Ссылки

  • Клуб любителей пентамино - можно прочесть правила, скачать компьютерную версию игры
  • BANJEN Pentamino - реализация игры
Статьи по теме: