當前位置:首頁 » 編程語言 » 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;
}

熱點內容
日本編程語言 發布:2025-05-11 09:53:52 瀏覽:843
手機店設置的初始密碼一般是多少 發布:2025-05-11 09:33:15 瀏覽:401
昂科威選擇哪個配置 發布:2025-05-11 09:25:50 瀏覽:36
怎麼解決安卓視頻全屏卡頓 發布:2025-05-11 09:14:55 瀏覽:726
匯編從編譯到執行 發布:2025-05-11 09:09:04 瀏覽:258
安卓系統低版本如何升級 發布:2025-05-11 09:04:44 瀏覽:252
認證類型加密演算法 發布:2025-05-11 08:58:35 瀏覽:561
android停靠 發布:2025-05-11 08:42:23 瀏覽:647
超時代加密 發布:2025-05-11 08:41:29 瀏覽:780
為什麼還要輸入支取密碼 發布:2025-05-11 08:32:24 瀏覽:362