README.md

Шахматная доска

Расширеная версия доски с сайта braingames.ru.

Зависимости

Скачать или подключить через CDN:

Либо подтянуть зависимости через bower.

Содержимое

Страницы

  • board.html - одиночная доска с автоматической загрузкой параметров отображения из location.hash и сохранением их там же (эта возможность включена только на этой странице). Фактически - аналог существующей, но использующий новые скрипты/стили. Понимает старый формат запросов из QUERY_STRING.
  • samples.html - примеры.

Скрипты (scripts/)

  • helpers.js - содержит различные функции, которые к собственно доскам отношения не имеют, но используются ими, например, парсер QUERY_STRING в объект.
  • chess.js - основной скрипт, реализующий весь функционал.
  • board.js - подключается на основной доске.
  • samples.js - примеры.

Стили (styles/)

  • chess.css - основной стиль, подключающийся на всех страницах.
  • board.css - стиль для страницы с одиночной доской.
  • samples.css - примеры.

Подгружать их самому на страницах не надо - это делают сами скрипты.

Для компиляции chess.css из chess.scss потребуется SASS.

Темы (themes/)

Планировалось использовать спецсимволы, но выглядели коряво.

Сперва были выбраны спрайты из GNOME Chess (fancy). Позже найдены и вырезаны со страниц в интернете еще два набора, в том числе из википедии. В конце концов были выбраны спрайты и цвета из оригинальной доски.

Возможности

  • Возможность создания нескольких досок на одной странице.
  • Отдельные настройки для каждой доски.
  • Свой набор кнопок для каждого блока.
  • Подсветка допустимых ходов (с учётом рокировок и взятия “на проходе”).
  • Запись и проигрывание ходов.
  • Использование тем.
  • Автоматическая инициализация особым образом оформленных слоёв на странице в доски.
  • Форматирование кода (оборачивание шаблонных строк с последующей инициализацией досок/ссылок).
  • Доска на основной странице board.html совместима со старым форматом записи расположения фигур.
  • Работа offline.

Форматы данных

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

То же касается имён клеток: a1h8. И так же выполняется поиск с заменой русских обозначений клеток на латинские:

  • а заменится на a;
  • б и в - b;
  • с и ц - c;
  • д - d;
  • е - e;
  • ф - f;
  • г - g;
  • х и н - h.

figures

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

Каждый из этих блоков представляет собой непрерывное описание вида <имя_фигуры><имя_клетки>, например Nb1 - конь на b1; или просто h7 - обозначение положения пешки.

Т.о. запись Nb10h7 очначает, что белый конь стоит на b1, а на чёрная пешка - на h7.

moves

Представляет собой перечень ходов через запятую, закодированный в Base64.

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

Выполняются следующие автозамены

  • (&mdash;), (&ndash;), (&minus;) - на - (обычное тире);
  • x (латинская) и : - на ×;
  • ... (три точки) - на (многоточие);
  • русские и латинские буквы “О” - на 0 (ноль).

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

Рокировки обозначаются 0-0-0 и 0-0. Формат других ходов выглядит следующим образом: <имя_фигуры><имя_клетки><действие><имя_клетки>, где действием может быть либо “тихий” ход, обозначаемый -, либо ход со взятием, обозначаемый ×. После хода без пробела может быть указано дополнительное действие:

  • ×<имя_клетки> - взятие пешки “на проходе”;
  • <имя_фигуры> - превращение пешки в указанную фигуру.

Интерфейс

Основной скрипт возвращает объект типа Chess, с помощью которого можно оперировать с отдельными досками на странице в виде объектов типа Board.

Chess

  • get - основной метод. В качестве параметров может принимать либо номер доски (если доска уже создана - она имеет свой номер), либо узел DOM, либо их коллекцию (массив, объект), либо объект jQuery. На выходе - объект типа Board или их коллекция. Метод ищет доски по указанным номерам. Если это не номера, а слои - пытается создать на них доски. Если доска на странице одна, её всегда можно получить запросом Chess.get(0).
  • dialog и window - создают всплывающее окно. На входе два необязательных параметра: строка или объект с параметрами новой доски и callback-функция, которая будет вызвана после создания доски. Функция вызывается в контексте созданного объекта (слой и окно соответственно) и принимает два аргумента: объект Chess для текущего окна и объект типа Board с созданной доской. Важно callback-функция не сработает, если открывается новое окно по протоколу file:.
  • markup - форматирование кода. На входе может быть либо строка, либо узел DOM, либо их коллекция (массив, объект), либо объект jQuery. То же и на выходе, но с преобразованиями исходного текста в сооветствии с шаблонами форматирования и вторым аргументом (он может быть проигнорирован, если исходный контент содержит явно другое указание), который определяет, как должны интерпретироваться шаблоны в коде. Метод ищет шаблонные строки и преобразует их либо в обычные ссылки на одиночную доску, либо в ссылки на всплывающее окно, либо в код, который автоматически развернётся в полноценную доску непосредственно на странице:
    • URL вида <path_to_chess>/index.php[?…] будет преобразован в обычную ссылку на доску, при этом выполнится преобразование из старого формата запроса в новый;
    • URL вида <path_to_chess>/board.html[#…] - аналогично; без преобразования;
    • Строка вида chess[link|init|dialog|window]:[…] будет обработана с учётом второго аргумента и того указания, что имеется в ней.
  • newFormat и oldFormat - принимают и возвращают строки; занимаются преобразованием между новым и старым форматами описания расстановки фигур.
  • addStylesheet подгружает на страницу таблицу стилей из файла styles/….css. Путь - относительно базовой папки скрипта, расширение указывать не нужно.
  • path - свойство (не метод!), содержащее путь к одиночной доске относительно DOCUMENT_ROOT.

Board

  • number - аргументов не имеет; возвращает номер доски (её ID).
  • theme принимает строку с именем стиля и устанавливает его для отображения.
  • figures принимает строку с описанием расстановки фигур и устанавливает её в качестве расстановки по умолчанию.
  • moves принимает строку с описанием расстановки фигур и устанавливает её в качестве расстановки по умолчанию. Вторым необязательным аргументом является указание, нужно ли раскодировать строку из Base64.
  • setup принимает один необязательный аргумент - объект с полями figures и moves; если не передан или поле в нём пусто - данные берутся из параметров по умолчанию.
  • reset сбрасывает состояние доски до начального; аргументами можно указать, что именно нужно сбросить - figures или moves.
  • plays, play и stop: первый метод проверяет, не выполняется ли реплей в данный момент; второй и третий - запускают либо останавливают его по возможности. Аргументов не имеют. На выходе у всех - статус, выполняется ли реплей.
  • data возвращает текущее состояние доски; результат зависит от переданного аргумента (необязательно, по умолчанию = 0):
    • -1: вернёт строку вида figures=…&moves=…, т.е. то, что можно использовать для создания ссылок, открытия всплывающих окон и т.п.;
    • 0: вернёт объект с полями figures или moves, причём данные ходов уже будут декодированы из Base64;
    • 1: тот же объект, но ходы будут разбиты в массив, а фигуры в объект вида {a8: 'blackRook', e2: 'whitePawn' …}.

Ссылки

Скриншоты

screenshot

Конвейеры
0 успешных
0 с ошибкой