Шахматная доска
Расширеная версия доски с сайта 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: вернёт строку вида
Ссылки
Скриншоты
Описание
Chess board