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