急求C++设计象棋打谱程序的源代码

急求C++设计象棋打谱程序的源代码,第1张

这是一个简单的程序,会自动计算提子,但不会数目。其它的运行一次估计就差不多会用了。稍微写了点注释。

#include<stdioh>

#include<stdlibh>

char board[21][21];

char move[5][2]=,,,,};

void initBoard();//初始化棋盘

void showBoard();//输出棋盘

char set(int x,int y,char color);//下子

void process(int xx,int yy);//计算提子

int main()

{

FILE fptr=NULL;

char pufile[256]=;

char op;

int s;

int x,y,r;

char color;

char win;

int cnt;

start:

s=8;

while(s!=1 && s!=2)

{

printf("选择模式:\n1---下棋\n2---看棋谱\n0---退出\n");

printf("下棋模式下,下子请输入s x y(x,y为位置),认输输入g,和棋输入h\n选择:");

scanf("%d",&s);

if(s==0) return 0;

//Egg1

if(s==10) printf("Programmer: swordlance :)\n");

//Egg1 end

}

getchar();

printf("输入棋谱路径:");

gets(pufile);

if(s==1) fptr=fopen(pufile,"w");

else fptr=fopen(pufile,"r");

if(!fptr)

{

printf("文件无法打开(创建)!\n");

system("PAUSE");

return -1;

}

initBoard();

cnt=0;

color='B';

while(op!='g')

{

system("CLS");

showBoard();

printf("(第%d手)",++cnt);

if(s==1)

{

printf("%c 方:",color);

scanf("%c",&op);

//printf("[%c]",op);

if(op=='s')

{

scanf("%d %d",&x,&y);

getchar();

if(set(x,y,color)!=0)

{

printf("该处不能落子!\n");

cnt--;

system("PAUSE");

}

else

{

process(x,y);

fprintf(fptr,"%d %d\n",x,y);

if(color=='B') color='W';

else color='B';

}

}

else if(op=='g')

{

printf("%c 方认输。\n",color);

if(color=='B') fprintf(fptr,"0 1\n");

else fprintf(fptr,"0 -1\n");

fflush(fptr);

fclose(fptr);

system("PAUSE");

goto start;

}

else if(op=='h')

{

printf("和棋。\n");

fprintf(fptr,"0 0\n");

fflush(fptr);

fclose(fptr);

system("PAUSE");

goto start;

}

else

{

printf("参数错误,下子请输入s x y(x,y为位置),认输输入 g,和棋输入h");

cnt--;

system("PAUSE");

}

}

else

{

fscanf(fptr,"%d %d",&x,&y);

if(x==0)

{

if(y>0) printf("W 方胜!\n");

else if(y<0) printf("B 方胜!\n");

else printf("和棋!\n");

system("PAUSE");

goto start;

}

else

{

printf("%c 方落子(%d,%d)\n",color,x,y);

set(x,y,color);

process(x,y);

if(color=='B') color='W';

else color='B';

}

system("PAUSE");

}

}

system("PAUSE");

return 0;

}

void initBoard()

{

int i,j;

board[0][0]='O';

for(i=1;i<=19;i++) board[0][i]='-';

board[0][20]='O';

for(i=1;i<=19;i++)

{

board[i][0]='|';

for(j=1;j<=19;j++) board[i][j]='+';

board[i][20]='|';

}

board[20][0]='O';

for(i=1;i<=19;i++) board[20][i]='-';

board[20][20]='O';

board[4][4]=board[4][10]=board[4][16]=

board[10][4]=board[10][10]=board[10][16]=

board[16][4]=board[16][10]=board[16][16]='';

}

void showBoard()

{

int i,j;

for(i=0;i<=20;i++)

{

for(j=0;j<=20;j++)

{

printf("%c",board[i][j]);

}

printf("\n");

}

}

char set(int x,int y,char color)

{

if(board[x][y]=='W' || board[x][y]=='B') return -1;//不能落子

else board[x][y]=color;

return 0;

}

//计算提子

void process(int xx,int yy)

{

char his[21][21]=;//记录算过的棋子以节约效率

char Q[400][2]=;//某一片棋

int e;//Q的长度。

char mcolor;//这片棋的颜色

char ecolor;//另一种颜色

int QI=0;//气数

int i,j,k,l,m;

int x,y;

for(m=0;m<5;m++)

{

i=xx+move[m][0];//为了能够完成打劫,先算别人再算自己

j=yy+move[m][1];

if(his[i][j]==0 && (board[i][j]=='W' || board[i][j]=='B')) //该位置有子开始算气

{

QI=0;

his[i][j]=1;

mcolor=board[i][j];

ecolor=(board[i][j]=='W''B':'W');

//printf("m=%c e=%c\n",mcolor,ecolor);

Q[0][0]=i;

Q[0][1]=j;

e=1;

for(k=0;k<e;k++)

{

for(l=0;l<4;l++)

{

x=Q[k][0]+move[l][0];

y=Q[k][1]+move[l][1];

//printf("x=%d y=%d\n",x,y);

//system("PAUSE");

if(x>0 && y>0 && x<20 && y<20 && his[x][y]==0)

{

if(board[x][y]==mcolor)//己方,长气

{

Q[e][0]=x;

Q[e][1]=y;

e++;

his[x][y]=1;

}

else

{

if(board[x][y]=='+') QI++; //空地,加气,忽略重复计算

}

}

}

}

//printf("QI=%d\n",QI);

//system("PAUSE");

if(!QI)//死棋,提子

{

for(k=0;k<e;k++)

{

board[Q[k][0]][Q[k][1]]='+';

his[Q[k][0]][Q[k][1]]=0;

}

}

}

}

}

是《象棋奇兵》。

该游戏基于Bitboard设计,棋力高超稳定,曾荣获2005年第十届奥林匹克中国象棋电脑软件大赛冠军。

《象棋奇兵》在推出36免费版试用获得不错反响后,于2004年发布了象棋奇兵101版开始进行商业化,面向市场进行发售,此后又陆续发布了102、104、22、23、24、30、40、50、60等多个版本。

从102版本开始,象棋奇兵推出了高级版本,开始支持多线程运算,是为象棋软件开先河,其高超的棋力、全面的功能受到棋友的广泛好评。

该软件的主要功能:

1、棋谱研究。能够读取pgn、xqn等不同格式的中国象棋棋谱文件,可以方便的进行打谱研究。支持棋谱和局面剪切板 *** 作。

2、人机对战。具有很强的人工智能,方便灵活的时间设置和强大的棋步分析功能。

3、摆设残局。方便快捷的残局摆设功能,丰富的快捷键,轻松实现让子和让先对弈的功能。

4、网络对战。内置弈天网站自动对弈功能,可以连接到弈天网站进行自动对弈。同时利用“弈星”象棋连线程序,能够让本软件连接到任何象棋网站进行自动对弈。

目前市面上还没有与微信同步的中国象棋棋盘。不过,有一些可以在手机上玩中国象棋的应用程序,例如“象棋巫师”、“天天象棋”等,这些应用程序可以通过微信分享功能将游戏结果分享给好友。另外,在微信中也有一些小程序提供了在线对弈的功能,你可以尝试搜索相关小程序来体验。

1、象棋打谱软件——象棋桥

象棋桥是用于中国象棋棋谱管理的免费软件,软件易学易用、界面美观,集棋谱欣赏、研究、记录、搜索、管理于一体,支持简体中文和繁体中文两种界面。他有着强大的编辑功能,可以创建出任何需要的棋谱;人性化的模拟对弈,用来记谱是再好不过了;极高的搜索速度,在列出结果的同时,还列出了搜索盘面的所有变化。

2、象棋拆解软件——冰河五四

类似软件里比较突出的是象棋名手和象棋旋风。这2款软件也各有优缺点,象棋旋风中局算法比较突出,适合喜爱攻杀型棋手学习。象棋名手则更注重全面均衡,不容易跳水。象棋大师和专业队更多采用象棋名手辅助训练。

3、中国象棋APP(最好的手机软件)

中国象棋APP是目前最好用的手机象棋软件,不仅可以真人对弈,还有着和象棋桥同样的功能。中国象棋APP可以导入大多数象棋棋谱,并对棋谱进行修改、管理等 *** 作,挑战模式内置数千盘残局、排局供棋友练习各种象棋杀法,并提供电脑提示功能,可以认为是手机版的“象棋桥”。

4、人气最旺的象棋对弈软件——天天象棋

天天象棋引爆了象棋迷对游戏新一轮的追捧设计了包括残局和与AI完整对局两种。残局只需多摸索就能找到致胜棋路,与AI的对战则真正考验玩家自身的棋力。还有那接近于真实对局的体验,逼真的木纹棋盘、棋子,足以让挑剔的象棋迷沉浸其中。复盘功能也算强大,可以让玩家保存棋谱,增加变招、管理棋谱。作为腾讯棋牌系列的中坚力量,《天天象棋》已经制作得很出色。

5、云顶之弈

云顶之弈可以在手机上玩,只不过要下载腾讯的wegame才可以玩,虽然现在用手机就可以下棋,但是也只能下棋而已,其他的模式不能玩,很多网友也纷纷吐槽:又一款手游,果然还是逃不过手游的命啊。

天天象棋软件用法如下:

1、打开手机应用微信,进入微信首页找到发现并点击。

2、在发现界面,找到小程序并点击。

3、在上面的输入框中输入象棋,搜索天天象棋小程序,点击搜索列表中的天天象棋小程序,打开就可以用了。

以上就是关于急求C++设计象棋打谱程序的源代码全部的内容,包括:急求C++设计象棋打谱程序的源代码、单兵作战的象棋软件是啥、有没有中国象棋棋盘与微信同步等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9752616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存