Учим шахматную ходилку записывать ходы партии
Уже не первый вопрос о ней вроде такого:
Мне нужно сконструировать сайт, чтобы двое могли между собой играть в шахматы. Можно ли записывать ходы не в FEN нотации?
Для простейшей записи партии "обычным текстом" достаточно добавить запись хода последними строками функции
DoMove
из файла chess.js
(перед завершающей функцию строкой return true;
):
var s='ABCDEFGH'; var hod=s.substring(fileFrom,fileFrom+1)+(++rankFrom)+'-'+s.substring(fileTo,fileTo+1)+(++rankTo); var hod1; if (nh%2) hod1='<br>'+Math.round(nh/2)+'. '+hod; else hod1=' '+hod; $('hod').innerHTML+=hod1; nh++;
Переменная nh
(номер хода) описана в любом месте выше функции, например, прямо перед ней:
var nh=1; function DoMove(position, fileFrom, rankFrom, fileTo, rankTo, exInfo) { ...
Ну и сам раздел, конечно, создать в документе, откуда вызывается скрипт. Можно, например, сразу под тегом
<script>
, вызывающим метод SetDiagram
:
<div id="hod"></div>
Осталось решить проблему с отменой хода, для этого ходы нужно не просто писать в раздел, а накапливать
в массиве, как делается с позициями FEN в массиве history
(см. функции SetDiagram
, UndoClick
в файле chessGui.js
). Думаю, по аналогии это нетрудно сделать. Вообще, изучать исходники - полезно.
P.S. На самом деле, всё вышесказанное - бред (кроме последнего абзаца). Если уж делать, то нормально, ввести объект notation
и с ним работать. В общем, заглянув на страницу скрипта и скачав обе версии можно увидеть, как немало изменилось в исходниках. Это говорит о том, что GUI несовершенен :)
Сюда же добавлю ответ на ещё один маленький вопрос - можно ли по-другому разместить нотацию, поменять дизайн и т.п.?
Конечно, можно, например, так:
<table border="0" cellpadding="4" cellspacing="0" align="center"><tr><td valign="top" width="200"> <p id="notId"></p> </td><td valign="top"> <form name="chessFormId" id="chessFormId"> <div align="center"> <div id="chessDivId" style="width:328px"></div> <p><span id="chessDivIdSpan" style="color:green"></span></p> <input id="chessUndoId" type="button" value="Отменить ход"/> <input name="btnSetFen" type="button" value="Задать FEN" onclick="SetFen('chessDivId', 'chessUndoId', 'notId')"/> </div> </form> <script type="text/javascript"> SetDiagram("chessDivId", "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", "chessUndoId","notId"); </script> </td></tr></table>
Здесь нотация выводится слева от доски в столбце таблицы шириной 200 пикселов. При выводе справа надо отследить, где находится код JavaScript по отношению к контейнеру notId
- если контейнер описан ниже по тексту, чем используется, в ряде браузеров это может вызвать проблему с его "опознанием" интерпретатором.
Почему не рабоатет вместе с JQuery?
Когда это писалось, JQuery ещё не был так распространён. Просто замените везде в файле chessGui.js
символ $
(имя функции, которое есть и в JQuery) на другое имя, например, get_Id
, проверено, заработает. ну или, если мне не изменяется память, в JQuery есть метод noConflict
(в новой версии несовместимость исправлена, качать со страницы по ссылке вверху)
01.05.2012, 00:14 [9981 просмотр]