一、ElephantBoard的目标和现状 《象棋百科全书》网站的宗旨是发展一个中国象棋信息化的平台,发展方向是把国际象棋的信息化理念移植到中国象棋上,为此网站的初步目标是开发一个中国象棋的WinBoard。 ElephantBoard就得名于“中国象棋的WinBoard”,根据《象棋百科全书》中的《论中国象棋信息化的发展》一文,ElephantBoard的目标是实现以下功能: (1) 棋谱录入和编辑; (2) 自动识别开局; (3) 局面的设置; (4) 加载对弈引擎。 现在ElephantBoard的设计工作相当顺利,这些功能基本得到实现,因此作者公布了最新一个测试版本——ElephantBoard 0.92b。 二、ElephantBoard的特色功能 ElephantBoard有以下三个最具特色的功能: (1) 产生类似于ChessBoard HTML Publisher的Web页面,和象棋演播室的Java棋盘相比,Web页面最大的好处是用户可以自己对它们进行加工,得到美观的互动棋谱。另外ElephantBoard产生的Web代码使用的是JavaScript脚本,可以被绝大多数浏览器识别。 (2) 自动产生ECCO(中国象棋开局百科)编号,ECCO编号共有500个,其中250多个有了归属,任何一个开局(不管是否合理)都可以找到相应ECCO编号,并查询开局和变例的名称,这有助于对棋谱按照开局信息归类。 (3) 提供对弈引擎接口,可以进行人机对弈和局面推演,这是ElephantBoard的主要功能,附带的引擎ElephantEye(象眼)也具有一定的水平。 当然,ElephantBoard也吸取了其他棋谱编辑软件(特别是WinBoard和象棋演播室)的特点,具有一般棋谱编辑软件的绝大部分功能,包括: (1) 单文档界面(SMI)(这是WinBoard的做法),使得界面紧凑并且操作方便,必要时可以启动多个ElephantBoard程序; (2) 可以直接打开与ElephantBoard相关联的PGN和FEN文件,在ElephantBoard运行时,也可以把这些文件拖放到ElephantBoard的窗口中; (3) 棋谱文件(PGN)和局面文件(FEN)都借鉴国际象棋的标准格式,这两种格式最容易推广; (4) 输入、删除着法; (5) 在棋谱文件中加入对局信息和注释; (6) 编辑局面; (7) 加入变着,变着信息可以用另一个ElephantBoard窗口浏览; (8) 产生可以贴在BBS上的文本棋盘(这是XQStudio的特色功能); (9) 产生可以贴在网页或印刷品上的图片棋盘(这也是XQStudio的特色功能); (10) 产生可以贴在论坛上的Java棋盘代码(这是XQStudio、CCBridge等软件的特色功能); (11) 键盘快速输入(这也是XQStudio的特色功能,但是ElephantBoard的输入方式略有不同)。 三、下一个版本 比起前两个版本,ElephantBoard 0.92b有明显的飞跃,以上资料中以红色标出的部分,就是该版本新增的功能。 目前ElephantBoard还称不上是完善的象棋对弈软件,原因有两方面,一是不能设定限时,二是无法对长将等违例着法作出判断。原因是目前UCCI引擎协议还不够完善,没有好的引擎可供调试。 ElephantBoard的下一个版本(可能是0.93b)将重点实现这两方面功能,为支持这些功能的实现,附带的引擎ElephantEye也会有质的飞跃。
========================================================= ElephantBoard说明资料ElephantBoard是中国象棋对弈和棋谱编辑软件,是中国象棋的WinBoard。
ElephantBoard有以下三个最具特色的功能: (1) 产生类似于ChessBoard HTML Publisher的Web页面,和象棋演播室的Java棋盘相比,Web页面最大的好处是用户可以自己对它们进行加工,得到美观的互动棋谱。另外ElephantBoard产生的Web代码使用的是JavaScript脚本,可以被绝大多数浏览器识别。 (2) 自动产生ECCO(中国象棋开局百科)编号,ECCO编号共有500个,其中250多个有了归属,任何一个开局(不管是否合理)都可以找到相应ECCO编号,并查询开局和变例的名称,这有助于对棋谱按照开局信息归类。 (3) 提供对弈引擎接口,可以进行人机对弈和局面推演,这是ElephantBoard的主要功能,附带的引擎ElephantEye(象眼)也具有一定的水平。 当然,ElephantBoard也吸取了其他棋谱编辑软件(特别是WinBoard和象棋演播室)的特点,具有一般棋谱编辑软件的绝大部分功能,包括: (1) 单文档界面(SMI)(这是WinBoard的做法),使得界面紧凑并且操作方便,必要时可以启动多个ElephantBoard程序; (2) 可以直接打开与ElephantBoard相关联的PGN和FEN文件,在ElephantBoard运行时,也可以把这些文件拖放到ElephantBoard的窗口中; (3) 棋谱文件(PGN)和局面文件(FEN)都借鉴国际象棋的标准格式,这两种格式最容易推广; (4) 输入、删除着法; (5) 在棋谱文件中加入对局信息和注释; (6) 编辑局面; (7) 加入变着,变着信息可以用另一个ElephantBoard窗口浏览; (8) 产生可以贴在BBS上的文本棋盘(这是XQStudio的特色功能); (9) 产生可以贴在网页或印刷品上的图片棋盘(这也是XQStudio的特色功能); (10) 产生可以贴在论坛上的Java棋盘代码(这是XQStudio、CCBridge等软件的特色功能); (11) 键盘快速输入(这也是XQStudio的特色功能,但是ElephantBoard的输入方式略有不同)。 下载地址:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta name="Author" content="ShengYu"> <title> 中炮横车盘头马对屏风马进3卒左炮巡河(象棋桥) </title> <style type="text/css"> <!-- p { font-family: "宋体"; font-size: 9pt; line-height:9pt} td { font-family: "宋体"; font-size: 9pt; line-height:9pt} input { font-family: "宋体"; font-size: 9pt; line-height:14pt} .unnamed1 { font-size: 9pt} big { font-family: "宋体"; font-size: 12pt; line-height:12pt} --> </style> <script Language="JavaScript"> <!-- currpos=0; count=0; ccbdelaytime=1000; IsPlay=false; var qp=new Array(91); var qzmap=new Array(34); var js=new Array(18); var m=new Array(65); function InitQZMap() { qzmap[33]="none.gif"; qzmap[1]="qzr1.gif"; qzmap[2]="qzr2.gif"; qzmap[3]="qzr3.gif"; qzmap[4]="qzr4.gif"; qzmap[5]="qzr5.gif"; qzmap[6]="qzr4.gif"; qzmap[7]="qzr3.gif"; qzmap[8]="qzr2.gif"; qzmap[9]="qzr1.gif"; qzmap[10]="qzr6.gif"; qzmap[11]="qzr6.gif"; qzmap[12]="qzr7.gif"; qzmap[13]="qzr7.gif"; qzmap[14]="qzr7.gif"; qzmap[15]="qzr7.gif"; qzmap[16]="qzr7.gif"; qzmap[17]="qzb1.gif"; qzmap[18]="qzb2.gif"; qzmap[19]="qzb3.gif"; qzmap[20]="qzb4.gif"; qzmap[21]="qzb5.gif"; qzmap[22]="qzb4.gif"; qzmap[23]="qzb3.gif"; qzmap[24]="qzb2.gif"; qzmap[25]="qzb1.gif"; qzmap[26]="qzb6.gif"; qzmap[27]="qzb6.gif"; qzmap[28]="qzb7.gif"; qzmap[29]="qzb7.gif"; qzmap[30]="qzb7.gif"; qzmap[31]="qzb7.gif"; qzmap[32]="qzb7.gif"; } function InitQP() { for (i=1;i<=90;i++) qp=33; currpos=0; count=16; for (i=1;i<18;i++) js=""; m[64]=33; m[63]=31; m[62]=43; m[61]=34; m[60]=33; m[59]=1; m[58]=73; m[57]=82; m[56]=33; m[55]=19; m[54]=23; m[53]=3; m[52]=33; m[51]=9; m[50]=76; m[49]=81; m[48]=33; m[47]=27; m[46]=44; m[45]=26; m[44]=33; m[43]=2; m[42]=59; m[41]=66; m[40]=33; m[39]=20; m[38]=14; m[37]=4; m[36]=33; m[35]=14; m[34]=50; m[33]=59; m[32]=33; m[31]=18; m[30]=21; m[29]=2; m[28]=33; m[27]=9; m[26]=81; m[25]=90; m[24]=33; m[23]=29; m[22]=39; m[21]=30; m[20]=33; m[19]=2; m[18]=66; m[17]=83; m[16]=33; m[15]=25; m[14]=8; m[13]=9; m[12]=33; m[11]=8; m[10]=70; m[9]=89; m[8]=33; m[7]=24; m[6]=25; m[5]=8; m[4]=33; m[3]=11; m[2]=68; m[1]=71; qp[90]=9; qp[63]=16; qp[36]=32; qp[9]=25; qp[89]=8; qp[71]=11; qp[26]=27; qp[8]=24; qp[88]=7; qp[61]=15; qp[34]=31; qp[7]=23; qp[87]=6; qp[6]=22; qp[86]=5; qp[59]=14; qp[32]=30; qp[5]=21; qp[85]=4; qp[4]=20; qp[84]=3; qp[57]=13; qp[30]=29; qp[3]=19; qp[83]=2; qp[65]=10; qp[20]=26; qp[2]=18; qp[82]=1; qp[55]=12; qp[28]=28; qp[1]=17; } function ClickMyListbox(lb) { CCBGoHere(lb.value); showQP(); } function showQP() { for (i=1;i<=90;i++) { if (document.images[i-1].src!=qzmap[qp]) document.images[i-1].src=qzmap[qp]; } if (currpos==0) { } else { } } function CCBInNext() { if (currpos<count) { currpos++; qp[m[(currpos-1)*4+1]]=33; qp[m[(currpos-1)*4+2]]=m[(currpos-1)*4+3]; return (true); } IsPlay=false; document.buttonbar1.autoplay1.value=" |> "; return (false); } function CCBInPrev() { if (currpos>0) { currpos--; qp[m[currpos*4+1]]=m[currpos*4+3]; qp[m[currpos*4+2]]=m[currpos*4+4]; return (true); } return (false); } function CCBNext() { if (CCBInNext()) showQP(); } function CCBGoHere(i) { if (i!=currpos) { if (i>currpos) { for(;i>currpos;CCBInNext()); } else { for (;i<currpos;CCBInPrev()); } } } function CCBPrev() { if (CCBInPrev()) showQP(); } function CCBGoFirst() { for (;CCBInPrev();); showQP(); } function CCBGoLast() { for (;CCBInNext();); showQP(); } function ChangeDelayTime(lb) { ccbdelaytime=lb.value*1000; } function CCBAP() { CCBNext(); if (IsPlay) { setTimeout("CCBAP()",ccbdelaytime); } } function CCBAutoPlay() { if (IsPlay==false) CCBNext(); if (currpos<count) { if (IsPlay) { IsPlay=false; document.buttonbar1.autoplay1.value=" |> "; } else { IsPlay=true; document.buttonbar1.autoplay1.value=" || "; } if (IsPlay) { setTimeout("CCBAP()",ccbdelaytime); } } } --> </script> </head> <body background="bg.jpg"> <table border=0 align=center> <tr> <td> <big>
<B> 中炮横车盘头马对屏风马进3卒左炮巡河 </B> </big> </td> </tr> </table> <hr> <table border="0" align="center"> <tr> <td> <table border="1" cellspacing="0" cellpadding="1"> <tr> <td> <table border="0" cellspacing="0" cellpadding="1" background="qp.gif"> <tr> <td><img src="qzb1.gif"></td>
<td><img src="qzb2.gif"></td> <td><img src="qzb3.gif"></td> <td><img src="qzb4.gif"></td> <td><img src="qzb5.gif"></td> <td><img src="qzb4.gif"></td> <td><img src="qzb3.gif"></td> <td><img src="qzb2.gif"></td> <td><img src="qzb1.gif"></td> </tr> <tr> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td>
<td><img src="none.gif"></td> <td><img src="none.gif"></td> </tr> <tr> <td><img src="none.gif"></td> <td><img src="qzb6.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="qzb6.gif"></td> <td><img src="none.gif"></td> </tr> <tr> <td><img src="qzb7.gif"></td> <td><img src="none.gif"></td>
<td><img src="qzb7.gif"></td> <td><img src="none.gif"></td> <td><img src="qzb7.gif"></td> <td><img src="none.gif"></td> <td><img src="qzb7.gif"></td> <td><img src="none.gif"></td> <td><img src="qzb7.gif"></td> </tr> <tr> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td>
<td><img src="none.gif"></td> </tr> <tr> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> </tr> <tr> <td><img src="qzr7.gif"></td> <td><img src="none.gif"></td> <td><img src="qzr7.gif"></td>
<td><img src="none.gif"></td> <td><img src="qzr7.gif"></td> <td><img src="none.gif"></td> <td><img src="qzr7.gif"></td> <td><img src="none.gif"></td> <td><img src="qzr7.gif"></td> </tr> <tr> <td><img src="none.gif"></td> <td><img src="qzr6.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="qzr6.gif"></td> <td><img src="none.gif"></td>
</tr> <tr> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> <td><img src="none.gif"></td> </tr> <tr> <td><img src="qzr1.gif"></td> <td><img src="qzr2.gif"></td> <td><img src="qzr3.gif"></td> <td><img src="qzr4.gif"></td>
<td><img src="qzr5.gif"></td> <td><img src="qzr4.gif"></td> <td><img src="qzr3.gif"></td> <td><img src="qzr2.gif"></td> <td><img src="qzr1.gif"></td> </tr> </table> </td> </tr> </table> </td> <td><table border="0"> <tr> <td><table border="0"> <tr> <td> 标题:中炮横车盘头马对屏风马进3卒左炮巡河
</td> </tr> <tr> <td> 红方:中炮横车盘头马 黑方:屏风马进3卒左炮巡河 结果:和棋 </td> </tr> <tr> <td> 讲评: 录入:盛昱 </td> </tr> </table> </td>
</tr> <tr> <td><table border="0"> <tr> <td><form name="ccbshow1"> <p><select name="listbox1" size="16" onClick="ClickMyListbox(this)" onMouseOver="window.status='行棋列表'" onMouseOut="window.status=''"> <option value=1> 1. 炮二平五 </option> <option value=2> 马8进7 </option> <option value=3> 2. 马二进三 </option> <option value=4> 车9平8 </option> <option value=5> 3. 马八进七 </option>
<option value=6> 卒3进1 </option> <option value=7> 4. 车一进一 </option> <option value=8> 马2进3 </option> <option value=9> 5. 兵五进一 </option> <option value=10> 士4进5 </option> <option value=11> 6. 马七进五 </option> <option value=12> 炮8进2 </option>
<option value=13> 7. 车一平六 </option> <option value=14> 象3进5 </option> <option value=15> 8. 车九进一 </option> <option value=16> 卒7进1 </option> </select></p> </form> </td> <td><form name="ccbshow2"> <p><textarea name="showjs1" rows="16" cols="30" onMouseOver="window.status='注解'" onMouseOut="window.status=''"></textarea></p> </form> </td>
</tr> </table> </td> </tr> <tr> <td><table border="0"> <tr> <td> <FORM NAME="buttonbar1"> <INPUT TYPE="button" VALUE=" |< " onClick="CCBGoFirst()" onMouseOver="window.status='跳至开局'" onMouseOut="window.status=''"> <INPUT TYPE="button" VALUE=" <- " onClick="CCBPrev()" onMouseOver="window.status='上一步棋'" onMouseOut="window.status=''"> <INPUT TYPE="button" VALUE=" -> " onCLick="CCBNext()" onMouseOver="window.status='下一步棋'" onMouseOut="window.status=''"> <INPUT TYPE="button" VALUE=" >| " onCLick="CCBGoLast()" onMouseOver="window.status='跳至结局'" onMouseOut="window.status=''"> <INPUT name="autoplay1" TYPE="button" VALUE=" |> " onCLick="CCBAutoPlay()" onMouseOver="window.status='自动演示'" onMouseOut="window.status=''"> <select name="timebox" size=1 onClick="ChangeDelayTime(this)" onMouseOver="window.status='自动演示间隔时间'" onMouseOut="window.status=''"> <option value=1> 1秒</option>
<option value=2> 2秒</option> <option value=3> 3秒</option> <option value=5> 5秒</option> <option value=8> 8秒</option> <option value=11>11秒</option> <option value=15>15秒</option> <option value=20>20秒</option> <option value=25>25秒</option> <option value=30>30秒</option>
<option value=40>40秒</option> <option value=60>60秒</option> </select> </FORM> </td> <td> </td> <td> <FORM NAME="buttonbar2"> <INPUT TYPE="button" VALUE=" 关闭 " onClick="window.close()" onMouseOver="window.status='关闭此窗口'" onMouseOut="window.status=''"> </FORM> </td> </tr> </table>
</td> </tr> </table> </td> </tr> </table> <hr> <table border=0 align=center> <tr> <td> </td> </tr> </table> <Script Language="JavaScript"> <!-- InitQZMap(); InitQP(); showQP(); -->
</Script> </body> </html>
欢迎光临 华工象棋论坛 (http://www.hgchess.com/BBS/) | Powered by Discuz! X3.2 |