围棋c语言函数 c围棋源码

求C语言 围棋吃棋函数的思路!

你好!

为龙川等地区用户提供了全套网页设计制作服务,及龙川网站建设行业解决方案。主营业务为网站设计制作、成都做网站、龙川网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

建议你还是先找棋盘类的算法看一看吧

如有疑问,请追问。

用C语言. 编写一个文本界面的围棋打谱程序

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

#includestdio.h

#includestdlib.h

char board[21][21];

char move[5][2]={{-1,0},{1,0},{0,-1},{0,1},{0,0}};

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]={0};

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(y0) printf("W 方胜!\n");

else if(y0) 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]={0};//记录算过的棋子以节约效率

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

int e;//Q的长度。

char mcolor;//这片棋的颜色

char ecolor;//另一种颜色

int QI=0;//气数

int i,j,k,l,m;

int x,y;

for(m=0;m5;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;ke;k++)

{

for(l=0;l4;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(x0 y0 x20 y20 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;ke;k++)

{

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

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

}

}

}

}

}

用C语言绘制围棋棋盘

#include"graphics.h"

#include"conio.h"

void main()

{

initgraph(640,480);

for(int x=1;x20;x++)//划纵的19条线

line(x*20,40,x*20,400);

for(int y=2;y21;y++)//划横的19条线

line(20,y*20,380,y*20);

getch();

closegraph();

}

如何用C语言绘出一个围棋盘?

--

以怎么不用 MS VC++6 ??

编C语言一般都用啊

还有\xCD是C语言

Ascii代码 表示一个图形

用循环语句啊!

等我一下 晚上写出来 贴上哦

晚上10:00 上完课回来

呵呵 分给不给 随便 你的问题让我熟练了许多

分不重要了

我终于写出来了

调试了30分钟啊!

纯粹的循环 + 判断

-- 我就这点水平了 算法可能不好

如果有更好的告诉我 上QQ 或发百度消息给我

百度的显示有问题 最好

用源代码格式化工具格式化一下 百度有搜

#include stdio.h

void main()

{

int n,m,x,y,temp,j=0,i=0 ;

printf("输入棋盘的横格数,竖格数:\n");

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

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

n=2*x+1 ;

m=2*y+1 ;

printf("%d,%d\n",n,m);

while(jm)

{

j++;

temp=j%2 ;

i=0 ;

if(j==1)

{

while(in)

{

i++;

if(i==1)

{

printf("\xC9");

continue ;

}

if(n==i)

{

printf("\xBB\n");

continue ;

}

if(i%2!=0)

{

printf("\xCB");

continue ;

}

if(i%2==0)

{

printf("\xCD\xCD\xCD");

continue ;

}

}

continue ;

}

if(m==j)

{

while(in)

{

i++;

if(i==1)

{

printf("\xC8");

continue ;

}

if(n==i)

{

printf("\xBC\n");

continue ;

}

if(i%2!=0)

{

printf("\xCA");

continue ;

}

if(i%2==0)

{

printf("\xCD\xCD\xCD");

continue ;

}

}

continue ;

}

if(temp==0)

{

while(in)

{

i++;

if(i%2!=0)

{

printf("\xBA");

if(n==i)printf("\n");

continue ;

}

if(i%2==0)

{

printf(" ");

continue ;

}

}

continue ;

}

if(temp!=0j!=1)

{

while(in)

{

i++;

if(i==1)

{

printf("\xCC");

continue ;

}

if(n==i)

{

printf("\xB9\n");

continue ;

}

if(i%2!=0)

{

printf("\xCE");

continue ;

}

if(i%2==0)

{

printf("\xCD\xCD\xCD");

continue ;

}

}

continue ;

}

}

}

100%编译通过

可以画出任意大小的棋盘

如 5*3 5*5

只要你的屏幕能够显示

以上是用图像库画的棋盘

下面是用 __ 和 |

画的棋盘 其实很简单 替换一下就可以了

#include stdio.h

void main()

{

int n,m,x,y,temp,j=0,i=0 ;

printf("输入棋盘的横格数,竖格数:\n");

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

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

n=2*x+1 ;

m=2*y+1 ;

printf("%d,%d\n",n,m);

while(jm)

{

j++;

temp=j%2 ;

i=0 ;

if(j==1)

{

while(in)

{

i++;

if(i==1)

{

printf("__");

continue ;

}

if(n==i)

{

printf("__\n");

continue ;

}

if(i%2!=0)

{

printf("__");

continue ;

}

if(i%2==0)

{

printf("__");

continue ;

}

}

continue ;

}

if(m==j)

{

while(in)

{

i++;

if(i==1)

{

printf("__");

continue ;

}

if(n==i)

{

printf("__\n");

continue ;

}

if(i%2!=0)

{

printf("__");

continue ;

}

if(i%2==0)

{

printf("__");

continue ;

}

}

continue ;

}

if(temp==0)

{

while(in)

{

i++;

if(i%2!=0)

{

printf("|");

if(n==i)printf("\n");

continue ;

}

if(i%2==0)

{

printf(" ");

continue ;

}

}

continue ;

}

if(temp!=0j!=1)

{

while(in)

{

i++;

if(i==1)

{

printf("__");

continue ;

}

if(n==i)

{

printf("__\n");

continue ;

}

if(i%2!=0)

{

printf("__");

continue ;

}

if(i%2==0)

{

printf("__");

continue ;

}

}

continue ;

}

}

}


分享文章:围棋c语言函数 c围棋源码
转载源于:http://pwwzsj.com/article/dosiosd.html