Выбрать главу

Для любителей браузера Opera существует виджет с этой игрой. Есть несколько версий для Pocket PC и Java-вариантов для сотовых телефонов. Вообще, достаточно в поисковой системе набрать слово "Sokoban", и вы получите множество ссылок на варианты этой замечательной игры.

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

Научная сторона вопроса

Сокобан – игра логическая, стоит в одном ряду с кубиком Рубика, шашками и даже шахматами. Простые, можно даже сказать, элегантные правила – вершина айсберга. В глубине – сложная математическая теория. Поэтому нет ничего удивительного, что игрой заинтересовались ученые. Наверное, несчастный кладовщик Вася очень бы удивился, если б узнал, что его действия можно изучать с точки зрения теории вычислительной сложности. Задача решения этой головоломки относится к так называемым NP-трудным задачам, как часть более общего класса задач планирования движения (в общем случае Вася будет иметь право не только толкать, но и тянуть, и не один, а сразу несколько ящиков). Сокобан представляет интерес и для исследователей искусственного интеллекта: хорошо бы построить такого робота, который выполнял бы задачу Васи и, перемещая ящики по лабиринту, ставил их на определенные места. При этом нужно, чтобы он выполнял свою задачу в оптимально короткие сроки за минимальное количество шагов.

Трудность прохождения сокобана заключается не только в уровне ветвления дерева вариантов ходов (многие исследователи сравнивают эту игру по сложности с шахматами), но и в огромной глубине поиска по этому дереву. Для того чтобы найти верное решение, требуется перебрать очень много вариантов. Необходимое количество «правильных» ходов, ведущих к выигрышу, на некоторых уровнях может достигать тысячи. Однако опытные игроки, вооруженные эвристикой, могут быстро отсеять в мозгу заведомо тупиковые варианты, тем самым существенно сузив область поиска.

Некоторые (заметьте, только некоторые) уровни игры могут быть решены "автоматически", с помощью определенных итерационных поисковых алгоритмов. С этой целью, например, была создана программа Rolling Stone, которая умеет самостоятельно проходить некоторые уровни сокобана. Она была разработана в недрах GAMES Group Университета Альберты (одной из провинций Канады). Сложные же уровни сокобана все еще не поддаются «автоматическому» прохождению.

ОСС

В современном каратэ-до «осс» означает "терпение, уважение и признательность". Чтобы развивать сильное тело и сильный дух, необходимы жесткие тренировки, которые выдержать трудно. Каратисту приходится заставлять, «подталкивать» себя к тому, что он считает своим пределом. Ему хочется остановиться, но нужно бороться со своей слабостью и заставить себя победить. Чтобы сделать это, каратист должен проявить упорство, волю, а прежде всего – терпение. Это терпение и есть "осс".

Задачи и стратегия

Кроме главной задачи головоломки – расставить ящики по своим местам – существует еще две задачи для игрока: минимизировать перемещения ящиков по лабиринту и число движений человечка. Решение этих задач уже схоже с решением шахматных этюдов – правила те же, но игра обрастает дополнительными условиями. В общем, стратегия ходов осваивается игроком с первых минут игры. Есть несколько действий, которые нельзя совершать ни при каких обстоятельствах:

• нельзя допускать, чтобы два ящика оказались друг рядом с другом у стены (вы никогда их не вытащите оттуда: тянуть ящики нельзя, толкать два ящика – тоже);

• нельзя задвигать ящик в угол;

• нельзя сдвигать ящики в квадрат 2x2.

Кроме того, могут возникнуть такие ситуации, когда ящиками будет заблокирована определенная область лабиринта. И любая попытка разблокировать эту область, подвинув ящик, приведет к одной из описанных выше ситуаций.

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

Как мы уже говорили, универсального алгоритма решения этой головоломки фактически не существует. Однако есть программы, которые позволяют упростить решение: вычислить предположительно правильные ходы на определенную глубину, помочь в записи решения на диск. Если забыть про математический формализм, существует ряд программ, которые с полным правом могут носить название "solver". Они действительно умеют решать многие, даже не самые простые уровни. Но и у них есть предел. Список таких программ можно найти на странице www geocities com/erimsever/sokoban5.htm. Там же приведены очень интересные диаграммы, показывающие количество вариантов ходов на разных этапах решения.

В мире шахмат существуют определенные правила записей ходов и позиций на доске. В мире сокобана тоже выработаны такие правила. План уровня и первоначальное положение объектов записывается в обычном текстовом файле с помощью следующих символов: "#" – стены, "." – пустое место, куда надо поставить ящик (так называемая "цель"), "@" – человечек, "+" – человечек, который стоит на той клеточке, где находится одна из целей, "$" – ящик на пустом месте, "*" – ящик на одной из целей. Такой формат записи получил название "XSB File Format". Файлы этого формата могут иметь расширения: xsb, sok, rdf, lp0, dat, pak и даже просто txt. Этот формат хранения уровней вы найдете во многих клонах сокобана.

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

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

Есть еще более простой формат, где план уровня записывается в строчку. Такой формат удобен, например, для пересылки уровня по SMS (напомню, что имеется целый ряд мобильных версий сокобана). Уровень в таком формате выглядит, например, так:

[2-5#|3#3-#|#2-*#-2#|#-#2-*-#|#-*2-#-#|2#-#+2-#|-#3-$2#|-3#2-#|3-4#]

Цифрами обозначается количество повторений символа, который идет за этой цифрой. Символом "|" дается команда на начало новой строки.

Есть также отдельный формат для записей перемещений человечка по лабиринту. В нем все перемещения записываются буквами r, l, u и d (соответствующие четырем направлениям перемещений). Если при перемещении двигается ящик, то буквы записываются в верхнем регистре.