五子棋小案例

2021-08-21 08:02:29 字數 3608 閱讀 3766

#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子連線者獲勝。棋具與圍棋通用,起源於中國上古時代的傳統黑白棋種之一。主要流行於華人和漢字文化圈的國家以及歐美一些地區,是世...