中国象棋的源代码

JavaScript025

中国象棋的源代码,第1张

中国象棋源代码blackleft(){ int x,y,n if(blackcurpos.y>0) {blackcurpos.y--x=position[blacktemppos.x][blacktemppos.y].x y=position[blacktemppos.x][blacktemppos.y].y if(board[blacktemppos.x][blacktemppos.y]==0)drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]) else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)) {n=board[blacktemppos.x][blacktemppos.y] drawbmp(x,y,chessfile[n]) } if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)drawselecursor(blackoldpos) drawcursor(blackcurpos) blacktemppos.x=blackcurpos.x blacktemppos.y=blackcurpos.y }}blackright(){ int x,y,n if(blackcurpos.y<8) {blackcurpos.y++x=position[blacktemppos.x][blacktemppos.y].x y=position[blacktemppos.x][blacktemppos.y].y if(board[blacktemppos.x][blacktemppos.y]==0)drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]) else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)) {n=board[blacktemppos.x][blacktemppos.y] drawbmp(x,y,chessfile[n]) } if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)drawselecursor(blackoldpos) drawcursor(blackcurpos) blacktemppos.x=blackcurpos.x blacktemppos.y=blackcurpos.y }}blackdo(){ int i,j,x,y,n if(blackstate==SELECT&&blackcanselect()) {if(board[blackcurpos.x][blackcurpos.y]<=BLACK&&board[blackcurpos.x][blackcurpos.y]>0){ blackstate=MOVE drawselecursor(blackcurpos) blackoldpos.x=blackcurpos.x blackoldpos.y=blackcurpos.y } } else if(blackstate==MOVE&&blackcanmove()) {x=position[blackoldpos.x][blackoldpos.y].x y=position[blackoldpos.x][blackoldpos.y].y drawbmp(x,y,boardfile[blackoldpos.x][blackoldpos.y]) x=position[blackcurpos.x][blackcurpos.y].x y=position[blackcurpos.x][blackcurpos.y].y n=board[blackoldpos.x][blackoldpos.y] drawbmp(x,y,chessfile[n]) if(board[blackcurpos.x][blackcurpos.y]==RED_JIANG){ winner=BLACK finish=1 return }board[blackcurpos.x][blackcurpos.y]=n board[blackoldpos.x][blackoldpos.y]=0 for(i=0i<=2i++) for(j=3j<=5j++)if(board[i][j]==BLACK_JIANG) {x=iy=j}for(i=x+1,j=y,n=0i<=9i++){ if(board[i][j]==RED_JIANG&&n==0) {winner=REDfinish=1break} else if(board[i][j]!=0) n++ } turn=RED redstate=SELECT drawcursor(redcurpos) drawbmp(30,438,"bmp\\rzq.wfb") /*转交控制权给红方*/ } }blackundo(){ int x,y,n if(blackstate==MOVE) {x=position[blackoldpos.x][blackoldpos.y].x y=position[blackoldpos.x][blackoldpos.y].y n=board[blackoldpos.x][blackoldpos.y] drawbmp(x,y,chessfile[n]) blackoldpos.x=blackcurpos.x blackoldpos.y=blackcurpos.y drawcursor(blackcurpos) blackstate=SELECT }}/*----------------------------------------------------*/start(){ drawcursor(blackcurpos) drawbmp(30,438,"bmp\\bzq.wfb") while(!finish) {key=getkey() switch(key){ case RED_UP: if(turn==RED) redup() break case RED_DOWN: if(turn==RED) reddown() break case RED_LEFT: if(turn==RED) redleft() break case RED_RIGHT: if(turn==RED) redright() break case RED_DO: if(turn==RED) reddo() break case RED_UNDO: if(turn==RED) redundo() breakcase BLACK_UP: if(turn==BLACK) blackup() break case BLACK_DOWN: if(turn==BLACK) blackdown() break case BLACK_LEFT: if(turn==BLACK) blackleft() break case BLACK_RIGHT: if(turn==BLACK) blackright() break case BLACK_DO:if(turn==BLACK) blackdo() break case BLACK_UNDO:if(turn==BLACK) blackundo() break case ESCAPE: finish=1break } }}main(){ init() initpos() initchessmap() drawbmp(0,0,"bmp\\board.wfb") initdrawchess() /*初始化光标位置*/ redcurpos.x=redoldpos.x=redtemppos.x=9 redcurpos.y=redoldpos.y=redtemppos.y=8 blackcurpos.x=blackoldpos.x=blacktemppos.x=0 blackcurpos.y=blackoldpos.y=blacktemppos.y=0/*开始*/ start() if(winner==RED)drawbmp(200,200,"bmp\\redwin.wfb") else if(winner==BLACK)drawbmp(200,200,"bmp\\blackwin.wfb") elsedrawbmp(200,200,"bmp\\exit.wfb") getch() end()}

可以使用用标准棋谱文件"pgn"(.pgn)(当前只支持一个pgn文件里面只保存一盘棋谱)制作开局库。

制作方法:

用1个文件夹把准备制作开局库的棋谱装在一起,按后按选择,浏览保存着pgn格式棋谱的文件夹。

指定开局库文件保存的文件名称,注意109采用了新的开局库格式,文件的名为cyclone.obk。

制作条件供请根据棋谱的实际情况进行调整。制作完成后旋风的档夹会出现了一个new.obk,只要将原先的cyclone.obk

重新命名成

cyclone123456.obk,然后将new.obk重新命名成cyclone.obk,那就行了。进入旋风,开局库还不能用的。要将你想允许的步法,做以下步骤:在开局库信息的表格里面选中你想允许的步法,然后点击鼠标的右键,会弹出一个菜单。选择编辑,按“允许”就行。

开局库加步:

旋风v109或以上版本的开局库功能比v108或以下的要提高很多,增加了“加步”,“删步”和调整被选概率的功能。增加着法到开局库中。在引擎空闲和分析模式下,按住键盘的“ctrl”键(一般在键盘的左下角)不放,用鼠标走你要加的步,然后会弹出一个对话框。“胜局数”,“和局数”,“负局数”是提示用的信息,和引擎选择开局的步没有任何关系,“分数”的大小确定了该着发被选中的几率,分数越大,选中的机会越大。“允许”表示是否允许引擎选择该着发。

开局库删步:

在开局库信息的表格里面选中要删除的着法,然后点击鼠标的右键,会弹出一个菜单。选择删除,确认就可以从开局库中删除你所选中的开局库着法。

开局库修改:

在开局库信息的表格里面选中要修该的着法,然后点击鼠标的右键,选择编辑,会弹出一个对话框。按实际情况进行修改,修改完成后点击“确定”按钮,如果想放弃修改,点击“取消”按钮。

先打开旋风,再点查看—窗口—开局库信息。然后对着招法,比如炮二平五点右键出现编辑,有对勾的是允许走的,把对勾去了就是不让走了。

#include <stdio.h>

void main()

{int r=0

int c=0

int star_one=10

for(r=0r<=star_one*9r+=2)

{ for(c=0c<=star_one*8c++)

{if((r%star_one==0 || c%star_one==0)&&c%2==0 &&(r<=star_one*4 || r>=star_one*4+star_one) || (r>=star_one*4 &&r<=star_one*4+star_one &&(c==0 || c==star_one*8)))

{printf("%c",'*')}

else

{printf("%c",' ')}

}

printf("\n")

}

}