#include#include#include#define max 20
using namespace std;
bool flag=true;
int temp=1; // 為了實現黑白棋子的交替,使用全域性變數
void qizi(int array2[max],int array3[max],int array1[max]);
void huaqizi1(int array2[max],int array3[max],int array1[max],mouse_msg msg);
void huaqizi2(int array2[max],int array3[max],int array1[max],mouse_msg msg);
void huaqizi3(int array2[max],int array3[max],int array1[max],mouse_msg msg);
void huaqizi4(int array2[max],int array3[max],int array1[max],mouse_msg msg);
void panduanbaizi1(int array2[max],int a,int b);
void panduanbaizi2(int array2[max],int a,int b);
void panduanbaizi3(int array2[max],int a,int b);
void panduanbaizi4(int array2[max],int a,int b);
void panduanheizi1(int array3[max],int a,int b);
void panduanheizi2(int array3[max],int a,int b);
void panduanheizi3(int array3[max],int a,int b);
void panduanheizi4(int array3[max],int a,int b);
int main(void)
; //儲存黑子,只要交叉點的座標下了黑子,就將該座標置為3
int array3[max][max]=;
//儲存棋子,只要該座標下了棋子,就置為1,則該點不能被重新下棋子
int array1[max][max]=;
int k;
//接下來的幾個迴圈是將棋盤外面的區域置為1,表明不可被下棋子
for(k=0;k18)
else if(msg.x%40>18&&msg.y%40<18)
else if(msg.x%40>18&&msg.y%40>18)
}}void huaqizi1(int array2[max],int array3[max],int array1[max],mouse_msg msg)
else if(flag==false)}}
}void huaqizi2(int array2[max],int array3[max],int array1[max],mouse_msg msg)
else if(flag==false)}}
}void huaqizi3(int array2[max],int array3[max],int array1[max],mouse_msg msg)
else if(flag==false)}}
}void huaqizi4(int array2[max],int array3[max],int array1[max],mouse_msg msg)
else if(flag==false)}}
}//接下來是判斷棋子勝負的演算法實現
/*舉個例子,當白子下落後,就往左迴圈判斷不間斷最遠的白子的位置並記錄,
接下來就從那裡往右迴圈看白子是否是連續的五個,
這樣的演算法要四個,分別是從左到右,從上到下,斜上方到斜下方,斜下方到斜上方
若是,則白子贏,跳出迴圈,使棋盤不能被下棋子,並在介面顯示白子勝利
判斷黑子勝負的過程也是這樣的。
*/void panduanbaizi1(int array2[max],int a,int b)
c=b+1;
int count1=0;
for(;array2[a][c]==2;c++)
if(count1==5)
}void panduanbaizi2(int array2[max],int a,int b)
c=a+1;
int count1=0;
for(;array2[c][b]==2;c++)
if(count1==5)
}void panduanbaizi3(int array2[max],int a,int b)
c=a+1;
d=b+1;
int count1=0;
for(;array2[c][d]==2;c++,d++)
if(count1==5)
}void panduanbaizi4(int array2[max],int a,int b)
c=a+1;
d=b-1;
int count1=0;
for(;array2[c][d]==2;c++,d--)
if(count1==5)
}void panduanheizi1(int array3[max],int a,int b)
c=b+1;
int count1=0;
for(;array3[a][c]==3;c++)
if(count1==5)
}void panduanheizi2(int array3[max],int a,int b)
c=a+1;
int count1=0;
for(;array3[c][b]==3;c++)
if(count1==5)
}void panduanheizi3(int array3[max],int a,int b)
c=a+1;
d=b+1;
int count1=0;
for(;array3[c][d]==3;c++,d++)
if(count1==5)
}void panduanheizi4(int array3[max],int a,int b)
c=a+1;
d=b-1;
int count1=0;
for(;array3[c][d]==3;c++,d--)
if(count1==5)
}//以上**要執行的話必須要安裝ege圖形庫
總結:
這次小案例我覺得做的還行,用到了ege圖形庫,接觸到了以前沒有接觸到的東西,學到了很多。
可是也有不足的地方:那就是沒有乙個「開始遊戲」的動態gif
畫面。
還有就是沒有「人機對戰」的選項,因為我不會人機演算法,如果我以後會的話,我會加上去。
總的來說,這次要感謝老師出這樣乙個題目,不然我還是渾渾噩噩的浪下去,不可能被動及主動的接收這樣的知識。
下五子棋的bot 五子棋演算法
include include include include include include jsoncpp json.h c 編譯時預設包含此庫 define n 7 每個節點的分支數 以下為各棋型的識別碼 權重 define win 1 4000 define lose 2 4000 defi...
窮舉五子棋
本想窮舉五子棋必勝點,可惜呀,這貨窮舉太不現實了,寫出來了,根本沒辦法執行出來結果 include include include define rl 17 char s 14 int five rl rl void init void void print void int cs int i,in...
普通 五子棋
五子棋 五子棋是世界智力運動會競技專案之一,是一種兩人對弈的純策略型棋類遊戲,是世界智力運動會競技專案之一,通常雙方分別使用黑白兩色的棋子,下在棋盤直線與橫線的交叉點上,先形成5子連線者獲勝。棋具與圍棋通用,起源於中國上古時代的傳統黑白棋種之一。主要流行於華人和漢字文化圈的國家以及歐美一些地區,是世...