資源簡介
[純C語言 + Win32 API]一步一步寫個圍棋程序之二十二:最終代碼
Pelles C 編譯通過。

代碼片段和文件信息
#include?
#include?“GoBoard.h“
int?g_iBoardSize?=?19;????????????????????????????????//棋盤線數(shù)
BOARDDATA?g_BoardData[MAX_BOARDSIZE*MAX_BOARDSIZE];???//棋盤狀態(tài)數(shù)據(jù)
int?g_iStoneNumber?g_iShowStoneNumber;???????????????//棋子總手?jǐn)?shù)、總顯示數(shù)
STONECOLOR?g_cNextColor?=?BLACK;??????????????????????//下一手棋的顏色
STONEDATA?g_StoneData[MAX_STONENUMBER];???????????????//棋子信息數(shù)據(jù)
int?g_iBackStoneNumber;??????????????? ??//棋子備份總手?jǐn)?shù)
STONEDATA?g_BackStoneData[MAX_STONENUMBER];???????????//備份棋子信息數(shù)據(jù)
int?g_iTempStoneNumber;??????????????? ??//臨時棋子備份總手?jǐn)?shù)
STONECOLOR?g_BoardExam0[MAX_BOARDSIZE*MAX_BOARDSIZE];??????????//點目狀態(tài)各交叉點真實棋子顏色
STONECOLOR?g_BoardExam2[MAX_BOARDSIZE*MAX_BOARDSIZE];??????????//點目狀態(tài)各交叉點所屬顏色
static?STONECOLOR?g_BoardExam1[MAX_BOARDSIZE*MAX_BOARDSIZE];???//點目狀各色棋子邊線
static?DIRECTION?g_HaveCount[MAX_BOARDSIZE*MAX_BOARDSIZE];?????//算氣、尋找同色子的方向標(biāo)志
static?bool?g_NoLiberty[MAX_BOARDSIZE*MAX_BOARDSIZE];??????????//算氣的死活標(biāo)志
static?int?Count(unsigned?char?unsigned?char?STONECOLOR);
static?int?CheckLastStone(void);
static?void?FindSameInBoardExam0(unsigned?char?unsigned?char?STONECOLOR?bool);
static?STONECOLOR?DecideCrossColor(unsigned?char?unsigned?char?STONECOLOR?*p);
static?void?AddOneStone(unsigned?char?unsigned?char?STONECOLOR?bool);
static?void?DeleteLastStone(void);
//清空棋盤狀態(tài)數(shù)據(jù)
extern?void?ClearBoardData(void)
{
????unsigned?char?i?j;
????//棋盤內(nèi)數(shù)據(jù)全部歸0
????memset(g_BoardData?0?sizeof(g_BoardData));
????//棋盤外圍顏色賦?-1
????j?=?g_iBoardSize+1;
????for(i=0;?i<=j;?i++)
????{
????????g_BoardData[i].c?=?GREY;
????????g_BoardData[MAKESITE(j?i)].c?=?GREY;
????????g_BoardData[MAKESITE(i?0)].c?=?GREY;
????????g_BoardData[MAKESITE(i?j)].c?=?GREY;
????}
}
//清空棋子信息數(shù)據(jù)
extern?void?ClearStoneData(void)
{
????g_iStoneNumber?=?g_iShowStoneNumber?=?0;
????g_cNextColor?=?BLACK;
????memset(g_StoneData?0?sizeof(g_StoneData));
}
//拷貝棋子信息數(shù)據(jù)
extern?void?CopyStoneData(void)
{
????g_iBackStoneNumber?=?g_iStoneNumber;
????memcpy(g_BackStoneData?g_StoneData?sizeof(STONEDATA)*MAX_STONENUMBER);
}
//掃描?g_BoardExam,取得黑白各色子數(shù)
extern?void?ScanBoardExam(int?*b?int?*w?int?*e)
{
????unsigned?char?i?j;
????*b?=?*w?=?*e?=?0;
????//由真實棋子確定各色區(qū)域線
????for(i=1;?i<=g_iBoardSize;?i++)
????????for(j=1;?j<=g_iBoardSize;?j++)
????????????g_BoardExam1[MAKESITE(i?j)]?=?DecideCrossColor(i?j?g_BoardExam0);
????//確定各色區(qū)域線內(nèi)空格歸屬該色
????for(i=1;?i<=g_iBoardSize;?i++)
????????for(j=1;?j<=g_iBoardSize;?j++)
????????????g_BoardExam2[MAKESITE(i?j)]?=?DecideCrossColor(i?j?g_BoardExam1);
????//掃描全盤數(shù)子
????for(i=1;?i<=g_iBoardSize;?i++)
????????for(j=1;?j<=g_iBoardSize;?j++)
????????{
????????????if(g_BoardExam2[MAKESITE(i?j)]?==?BLACK)
????????????????(*b)++;
????????????else?if(g_BoardExam2[MAKESITE(i?j)]?==?WHITE)
????????????????(*w)++;
????????????else
????????????????(*e)++;
????????}
}
//初始化點目狀態(tài)各交叉點真實棋子顏色
extern?void?InitBoardExam0(void)
{
????unsigned?char?i?j;
????//盤面棋子
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????14863??2012-09-26?09:10??TryHandTalk\GoBoard.c
?????文件???????3287??2012-09-26?09:10??TryHandTalk\GoBoard.h
?????文件??????40670??2012-09-26?09:10??TryHandTalk\main.c
?????文件???????1583??2012-09-26?08:31??TryHandTalk\main.ppj
?????文件?????442422??2012-09-03?18:15??TryHandTalk\res\board.bmp
?????文件??????15550??2007-04-22?18:42??TryHandTalk\res\Dead.wav
?????文件??????17132??2008-06-02?08:00??TryHandTalk\res\Invalid.wav
?????文件???????8728??2007-04-22?18:39??TryHandTalk\res\Move.wav
?????文件??????72654??2012-09-03?18:15??TryHandTalk\res\Stone.bmp
?????文件??????13878??2012-09-07?12:02??TryHandTalk\res\ToolbarDisable.BMP
?????文件??????13878??2012-09-07?12:03??TryHandTalk\res\ToolbarHover.BMP
?????文件??????13878??2012-09-07?12:03??TryHandTalk\res\ToolbarNormal.BMP
?????文件???????2482??2012-09-13?17:46??TryHandTalk\resource.h
?????文件???????4929??2012-09-26?09:10??TryHandTalk\sgfSupport.c
?????文件????????762??2012-09-26?09:10??TryHandTalk\sgfSupport.h
?????文件???????1761??2012-09-26?08:45??TryHandTalk\TryHandTalk.cbp
?????文件???????2655??2012-09-13?17:46??TryHandTalk\TryHandTalk.rc
?????目錄??????????0??2012-09-07?17:41??TryHandTalk\res
?????目錄??????????0??2012-09-26?09:12??TryHandTalk
-----------?---------??----------?-----??----
???????????????671112????????????????????19
評論
共有 條評論