五子棋(人工智慧)

2021-08-31 00:21:26 字數 2493 閱讀 5302

五子棋

人人對戰   人機對戰

# include

# include//字元陣列的函式定義的標頭檔案

# include//standard library標準庫標頭檔案

# define kong 0

# define wanjia 1

# define diannao 2    // 空位置設為0 ,玩家下的位置設為1 ,電腦下的位置設為2 

int qipan[15][15];    // 15*15的棋盤 

int a,b,c,d,x;  // a b為玩家下子座標 ,c d為電腦下子座標 x為剩餘空位置

void start();  // 程式的主要控制函式 

void draw();   // 畫棋盤 

int win(int p,int q);  // 判斷勝利 p q為判斷點座標 

void ai(int *p,int *q);     //電腦下子 p q返回下子座標 

int value(int p,int q);     //計算空點p q的價值 

int qixing(int n,int p,int q);    //返回空點p q在n方向上的棋型 n為1-8方向 從右順時針開始數 

void yiwei(int n,int *i,int *j);  //在n方向上對座標 i j 移位 n為1-8方向 從右順時針開始數  

/****************主函式*****************/

int     main()

system("cls"); //呼叫系統dos的cls命令,清屏。

}while(k=='y');

printf("謝謝使用!\n");

}/*****************開始*******************/

void start()

if(moshi==3)

return ;

if(moshi==1)       //人機模式 

if(i==1)    //玩家先手下子 

a1=a; 

b1=b;

x--;   //棋盤格仔數相應減少乙個

qipan[b][a]=wanjia;  //玩家下的位置

system("cls");  //呼叫系統dos的cls命令,清屏。

draw();    //呼叫畫棋盤函式

}while(x!=0)

//電腦先下就下在7 7 

else 

//電腦下子

c1=c; 

d1=d;                 //儲存電腦上手棋型 

if(win(c,d))

if(ch=='n') 

else 

// 悔棋 

}printf("電腦下在%d %d\n請輸入:",c,d);

scanf("%d%d",&a,&b);   //玩家下子 

if(a==20&&b==20)  return;

if(a==15&&b==15) 

// 悔棋 

while((a<0||a>14)||(b<0||b>14)||qipan[b][a]!=kong) //判斷輸入座標是否錯誤

a1=a; 

b1=b; 

x--; 

qipan[b][a]=wanjia; 

system("cls"); 

draw();

if(win(a,b)) //呼叫win函式

//玩家贏 

}printf("和局\n");

}if(moshi==2)  //選擇人人對戰

while((a<0||a>14)||(b<0||b>14)||qipan[b][a]!=kong) 

a1=a;

b1=b; 

x--; 

qipan[b][a]=wanjia; 

system("cls"); 

draw();

printf("玩家1下在%d %d。\n",a,b);

if(win(a,b))   /* 呼叫win函式*/

/* 玩家1贏 */

printf("玩家2請輸入:"); 

scanf("%d%d",&c,&d);

if(a==20&&b==20)  return;

if(c==15&&d==15)    //悔棋

while((c<0||c>14)||(d<0||d>14)||qipan[d][c]!=kong) 

c1=c; 

d1=d;

x--; 

qipan[d][c]=diannao;

system("cls"); 

draw();

printf("玩家2下在%d %d。\n",c,d);

if(win(c,d))

/* 玩家2贏 */

}printf("和局\n");}}

/*************** 畫棋盤 ******************/

人工智慧五子棋實現原理

關於棋盤棋子的實現邏輯我就不多說了,大家可以看原始碼,並不複雜,說說ai部分的實現吧 我的實現思路是 1.走對自己獲得勝利最有利的點 說白了就是最接近5子連線的點 2.堵對對方獲得勝利最有利的點 說白了就是堵對方的棋子 做到這兩步就能實現乙個初級階段的人工智慧了。那麼接下來就講講關於計算獲得勝利最有...

五子棋的人工智慧演算法

以前曾研究過五子棋的人工智慧演算法,這篇文章就是講的實現與原理。當然也只是做了最簡單的研究,人工智慧是個高深的學問,我基本上不懂,這裡的實現也只是憑自己的感覺來寫的,程式也不是我寫的,但是原理就是這樣。我相信還有高手,我的文章也只能提供給一些初學者看看了。電腦下子實際上是分兩個步驟的,第乙個步驟是盡...

人工智慧實現簡單的五子棋程式

我這個程式在qq五子棋上實驗了一下,結果是黑棋先手全勝,白棋后手的勝率卻慘不忍睹,原因有下 1 五子棋的先手是有優勢的,所以職業比賽裡都會有禁手來實現公平 2 水平有限,對局面的評估只有一小部分 主要思路就是博弈樹,程式向前看一步,對對手可能的走法進行評估,評估的策略主要有兩條 1 掃瞄整個棋盤,判...