五子棋工程心得 藝果yiguo

2021-10-08 05:09:19 字數 3679 閱讀 1770

int

main

(int argc,

char

const

*ar**)

void

project_init()

這樣的作法一般用於多檔案全域性變數,不建議用於單檔案的全域性變數,單檔案建議用(static修飾)。

/*

多檔案全域性變數!

以及跨檔案巨集定義!

*/#ifndef _project_h_

#define _project_h_

​#define quit_game 0xff

#define undraw 0xfe

#define empty_pieces 0x00

#define nonempty_pieces 0x01

#define black 0

#define white 1

#define colorless 0xfd

#define covered 1

#define uncovered 0​​

typedef

struct coordinatecoordinate;

typedef

struct piecesdatapiecesdata;

​coordinate location;

piecesdata ps;

#endif

/*

單檔案全域性變數靜態化

*/static

char fd_lcd;

/*

網格定點演算法

location.x,location.y為全域性變數

網格的開始座標為(175,15)

結束座標為(625,465)

*/#define pow2(x,y) ((x)*(x)+(y)*(y))

​void

location_change_grid()

else

else

if(x > location.x && y < location.y)

//在相對位置的第二象限

else

if(x > location.x && y > location.y)

//在相對位置的第三象限

else

if(x < location.x && y > location.y)

//在相對位置的第四象限

else

//其他}}

location.x = x;

location.y = y;

}

minx =

abs(location.x - x)

;miny =

abs(location.y - y)

;//三點與獲取點之間的次進點,前項x為最近點

//採用最小距離公式——尤拉公式

x =(

pow2((

30-minx)

,miny)

<

pow2

(minx,(30

-miny))?

(x-30):

(pow2

(minx,(30

-miny)

)<

pow2((

30-minx),(

30-miny))?

(x):

(x-30))

);//同上

y =(

pow2((

30-minx)

,miny)

<

pow2

(minx,(30

-miny))?

(pow2((

30-minx)

, miny)

<

pow2((

30-minx),(

30-miny))?

(y):

(y-30))

:(y-30)

);

/*

將棋盤的資訊儲存在

typedef struct piecesdatapiecesdata;中

*/#define max(x,y) ((x)>(y)?(x):(y))

​static

char win;

​int

passtop_right

(int i,

int j,

int n,

int m);

intpass_right

(int i,

int j,

int n,

int m);

intpassbottom_right

(int i,

int j,

int n,

int m);

intpass_bottom

(int i,

int j,

int n,

int m);

intpass

(int i,

int j,

int n,

int m);

​int

game_over()

}int count;

for(

int j =

0;j <

16;j++)if

(count >=5)

}}}//判斷當前位置左上角是否有五子,返回左上方向上的棋子數

intpasstop_right

(int i,

int j,

int n,

int m)

return

passtop_right

(i-1

, j+

1, n, m)+1

;}//判斷當前位置左角是否有五子,返回左方向上的棋子數

intpass_right

(int i,

int j,

int n,

int m)

return

pass_right

(i, j+

1, n, m)+1

;}//判斷當前位置左下角是否有五子,返回左下方向上的棋子數

intpassbottom_right

(int i,

int j,

int n,

int m)

return

passbottom_right

(i+1

, j+

1, n, m)+1

;}//判斷當前位置下角是否有五子,返回下方向上的棋子數

intpass_bottom

(int i,

int j,

int n,

int m)

return

pass_bottom

(i+1

, j, n, m)+1

;}//返回所有路徑上的最多的個數。

intpass

(int i,

int j,

int n,

int m)

2020/7/17 10:27 finish 藝果yiguo

提取碼:yigu

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