БлогNot. Учим шахматную ходилку записывать ходы партии

Учим шахматную ходилку записывать ходы партии

Уже не первый вопрос о ней вроде такого:

Мне нужно сконструировать сайт, чтобы двое могли между собой играть в шахматы. Можно ли записывать ходы не в 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 просмотр]


теги: программирование javascript шахматы jquery

показать комментарии (1)