当前位置:首页 » 编程语言 » c语言围棋

c语言围棋

发布时间: 2022-05-13 23:55:33

① 围棋C语言数据结构

在电脑上搜“围棋教学平台自己学,好

② 纯C语言 + Win32 API]一步一步写个围棋程序

这么说吧,首先完整的一个易懂的包基本下不到。另外就算是有,你仍然是看不懂的,那可不是简单的一个Hello World,你没有基础知识,没有遇到过相应的问题你是不会知道为什么要那么做的。人家推荐你写这个,是让你以最终写出围棋程序作为目标,不是让你找个围棋程序看一看就行了。你不是自己从头到尾做的,你是一定不会懂得,一定不会。
其实围棋是个不错的目标,这个是很难很难的,估计你从C语言开始学,得有一年半到两年的苦心学习才能做出来一个可以玩的围棋,这还不包括人机对弈和网络对战。首先围棋的规则你要实现出来,其次如何支持局域网对战?网络又够你学半年(基础)。如何和电脑对战?AI又是个大难点。围棋的AI非常非常难,没有坚实的数据结构和算法的基础和AI相关算法的深刻理解你是写不出来好的AI的。另外为了AI的反应速度加快,你后期可能为了项目的深度会使用多线程减少AI思考的时间等等等等。还有跨平台等等。还有复盘啊,局势判断啊之类的功能。可以扩展的东西非常非常多。所以我说是个很不错的目标。目测没有两年半以上的潜心钻研你是做不出样子的。
怎样?看到我以上说的话,你觉得你从网上下一个什么围棋源码有用吗?里面用到的数据结构和算法你看的懂吗?里面的网络编程你懂吗?里面用到的tricks和优化你懂吗?里面用到的设计模式你懂吗?源码放在你面前你依然不懂。所以不要找了,不要想一步登天。这是很多新手的通病。能静下来心就从基础开始学起,到时候量变产生质变你都不需要问这个问题了,因为你懂得多了你自己就对这些问题有理解了,你再来看你这个问题就会发现自己当初很幼稚了。
所以,学起来吧。善于搜索,善于动手实践,少问,多做。你要真能把一个围棋游戏写的很完善,特别是AI功能和网络对战。那你就能秒杀很多人了。

③ 怎样用C语言编一个会下围棋的程序

#include"stdio.h"#include"conio.h"intmain(void){ints;intf;intm;printf("请输入一个时间:\n");scanf("%i%i%i",&s,&f,&m);if(m==59){m=0;f=f++;printf("%i%i%i\n",s,f,m);}else{m=m++;printf("%i%i%i\n",s,f,m);}getch();}

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

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

#include<stdio.h>
#include<stdlib.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(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]={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;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;
}
}
}
}
}

⑤ 谁知道怎样用C语言写出围棋表格8×8的代码

这是一个简单的程序,会自动计算提子,但不会数目。其它的运行一次估计就差不多会用了。稍微写了点注释。 #include #include char board[21][21]; char move[5][2]={{-1,0},{1,0},{0,-1},{0,1},{0,0}}; void initBoard();//初始化棋盘

⑥ 用C语言编写出围棋游戏,要求如下。希望有位大神前来帮忙

看上去只有寥寥数语,但实际上包括很多功能,可以看看是否有相应的开源代码,自己写那没有十天半个月是搞不定的。

⑦ 用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(j<m)
{
j++;
temp=j%2 ;
i=0 ;
if(j==1)
{
while(i<n)
{
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(i<n)
{
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(i<n)
{
i++;
if(i%2!=0)
{
printf("\xBA");
if(n==i)printf("\n");
continue ;
}
if(i%2==0)
{
printf(" ");
continue ;
}

}
continue ;
}
if(temp!=0&&j!=1)
{
while(i<n)
{
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(j<m)
{
j++;
temp=j%2 ;
i=0 ;
if(j==1)
{
while(i<n)
{
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(i<n)
{
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(i<n)
{
i++;
if(i%2!=0)
{
printf("|");
if(n==i)printf("\n");
continue ;
}
if(i%2==0)
{
printf(" ");
continue ;
}

}
continue ;
}
if(temp!=0&&j!=1)
{
while(i<n)
{
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语言绘制围棋棋盘

#include<stdio.h>

intmain()
{
intr,c;
for(r=0;r<19;++r){

for(c=0;c<19;++c){
if(r==0){
if(c==0)printf("┏");
elseif(c==18)printf("┓");
elseprintf("┯");
}elseif(r==18){
if(c==0)printf("┗");
elseif(c==18)printf("┛");
elseprintf("┷");
}else{
if(c==0)printf("┠");
elseif(c==18)printf("┨");
elseprintf("┼");
}
}
printf(" ");
}
return0;
}

热点内容
nds服务器ip地址 发布:2025-05-11 12:43:32 浏览:869
舒听澜卓禹安书名叫什么 发布:2025-05-11 12:36:44 浏览:268
java开发web应用 发布:2025-05-11 12:35:51 浏览:696
鲨鱼影视怎么缓存电视 发布:2025-05-11 12:35:48 浏览:549
ios小项目源码 发布:2025-05-11 12:35:47 浏览:756
为什么打开的三菱程序不能编译 发布:2025-05-11 12:16:40 浏览:21
ftp定价是怎么回事 发布:2025-05-11 12:09:18 浏览:334
android敏捷开发 发布:2025-05-11 11:56:49 浏览:80
脚本pon 发布:2025-05-11 11:52:27 浏览:826
ct5推荐哪个配置 发布:2025-05-11 11:47:45 浏览:742