Журнал «Компьютерра» № 27-28 от 24 июля 2007 года (695 и 696 номер)
Шрифт:
Трудность прохождения сокобана заключается не только в уровне ветвления дерева вариантов ходов (многие исследователи сравнивают эту игру по сложности с шахматами), но и в огромной глубине поиска по этому дереву. Для того чтобы найти верное решение, требуется перебрать очень много вариантов. Необходимое количество «правильных» ходов, ведущих к выигрышу, на некоторых уровнях может достигать тысячи. Однако опытные игроки, вооруженные эвристикой, могут быстро отсеять в мозгу заведомо тупиковые варианты, тем самым существенно сузив область поиска.
Некоторые (заметьте, только некоторые) уровни игры могут быть решены "автоматически", с помощью определенных итерационных поисковых алгоритмов. С этой
В современном каратэ-до «осс» означает "терпение, уважение и признательность". Чтобы развивать сильное тело и сильный дух, необходимы жесткие тренировки, которые выдержать трудно. Каратисту приходится заставлять, «подталкивать» себя к тому, что он считает своим пределом. Ему хочется остановиться, но нужно бороться со своей слабостью и заставить себя победить. Чтобы сделать это, каратист должен проявить упорство, волю, а прежде всего – терпение. Это терпение и есть "осс".
Кроме главной задачи головоломки – расставить ящики по своим местам – существует еще две задачи для игрока: минимизировать перемещения ящиков по лабиринту и число движений человечка. Решение этих задач уже схоже с решением шахматных этюдов – правила те же, но игра обрастает дополнительными условиями. В общем, стратегия ходов осваивается игроком с первых минут игры. Есть несколько действий, которые нельзя совершать ни при каких обстоятельствах:
• нельзя допускать, чтобы два ящика оказались друг рядом с другом у стены (вы никогда их не вытащите оттуда: тянуть ящики нельзя, толкать два ящика – тоже);
• нельзя задвигать ящик в угол;
• нельзя сдвигать ящики в квадрат 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 (соответствующие четырем направлениям перемещений). Если при перемещении двигается ящик, то буквы записываются в верхнем регистре.
За годы своего существования сокобан превратился из простой логической игрушки в культовый объект. С каждым годом появляются все новые и новые версии этой игры. По нему пишут диссертации и научные статьи. Он оброс различными вспомогательными программами и файловыми форматами. Ну и кроме всего прочего, сокобан – это неплохой способ убить время и потренировать мозги.
Софтерринки
Автор: Илья Шпаньков
ОС Windows
Адрес www codeode com/privacymantra/index html
Версия 2.03
Размер 463 Кбайт
Интерфейс английский (русский не поддерживается)
Цена бесплатно
Лицензия проприетарная (freeware)
Иногда возникает необходимость скрыть следы своей работы на компьютере. Сделать это нелегко, так как приложения генерируют массу данных, которые самым предательским образом сообщат, что вы делали в последний сеанс работы, но выход есть – утилита Privacy Mantra. Она позволит в пару кликов замести следы своей деятельности в различных приложениях и системных службах, при этом особое внимание уделяется всему, что связано с Интернетом: программа очищает кэш IE и Firefox, удаляет cookies, восстанавливает первоначальный вид истории посещений и выполняет множество других, не менее важных операций. Гибкие настройки позволяют проводить чистку только в определенных, указанных пользователем местах, а удобный интерфейс поможет не запутаться в этом важном деле и удалить все "улики".