一、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 |