Шахматная доска
Расширеная версия доски с сайта 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.
Форматы данных
Фигуры обозначаются в соответствии с международной нотацией, при этом перед обработкой любых данных производится поиск с заменой обзначений фигур в русской нотации, т.е. приводится к единому виду. Пешка никак не обозначается.
То же касается имён клеток: a1 … h8. И так же выполняется поиск с заменой русских обозначений клеток на латинские:
азаменится наa;бив-b;сиц-c;д-d;е-e;ф-f;г-g;хин-h.
figures
Представляет собой строку, которая может быть разбита на две части символом 0 или -, обозначающим смену цвета с белого на чёрный, т.е. в начале идёт описание расстановки белых фигур, потом - разделительный знак, потом - описание расстановки чёрных.
Каждый из этих блоков представляет собой непрерывное описание вида <имя_фигуры><имя_клетки>, например Nb1 - конь на b1; или просто h7 - обозначение положения пешки.
Т.о. запись Nb10h7 очначает, что белый конь стоит на b1, а на чёрная пешка - на h7.
moves
Представляет собой перечень ходов через запятую, закодированный в Base64.
Как и с именами фигур/клеток запись ходов предварительно обрабатывается - приводится к виду, максимально приближенному к международной нотации.
Выполняются следующие автозамены
—(—),–(–),−(−) - на-(обычное тире);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]:[…]будет обработана с учётом второго аргумента и того указания, что имеется в ней.
- URL вида
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' …}.
- -1: вернёт строку вида
Ссылки
Скриншоты
