本專案展示一款具備電腦 AI 對戰功能的五子棋遊戲,採用雙緩衝繪圖消除畫面閃爍,於 Windows 2000 + Visual C++ 6.0 環境開發編譯。
於 CFiveChessView 類別定義棋盤常數與狀態枚舉:
enum { MAX_X = 18, MAX_Y = 18, MIN_X = 1, MIN_Y = 1 };
enum { NONE = 0, BLACK = 1, WHITE = 2 }; // 棋子狀態
enum { ATTACK = 0, DEFEND = 1 }; // AI 策略
enum { MAN_FIRST = 0, COMPUTER_FIRST = 1 }; // 先手設定
enum { BOTH_PEACE = 0, BLACK_WIN = 1, WHITE_WIN = 2 }; // 勝負判定
enum { L_TO_R = 0, T_TO_B = 1, LB_TO_RT = 2, LT_TO_RB = 3 }; // 四大掃描方向
覆寫 CMainFrame::PreCreateWindow 移除可調整邊框,計算精確客戶區尺寸:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CFrameWnd::PreCreateWindow(cs))
return FALSE;
cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX;
cs.style &= ~WS_BORDER;
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
int cxBorder = GetSystemMetrics(SM_CXBORDER);
int cyBorder = GetSystemMetrics(SM_CYBORDER);
int cyCaption = GetSystemMetrics(SM_CYCAPTION);
int cyMenu = GetSystemMetrics(SM_CYMENU);
int cyStatus = GetSystemMetrics(SM_CYMENU);
cs.cx = 510 + cxBorder;
cs.cy = 530 + cyBorder + cyCaption + cyStatus + cyMenu;
return TRUE;
}
封裝棋盤狀態、AI 走位演算法、勝負判斷等核心功能:
class CChess : public CObject
{
public:
// 靜態棋盤參數
static int Start_X, Start_Y, Width_X, Height_Y;
CObList pList;
CList List; // 雙向鏈結串列
// 棋盤狀態存取
inline void SetChessState(int x, int y, int nState);
inline int GetChessState(int x, int y);
// 遊戲控制
inline void SetWhoFirst(int nWhoFirst);
inline void SetGoStyle(int nGoStyle);
inline void SetResult(int nResult);
// AI 掃描演算法(四方向五連檢測與六連防禦)
BOOL GetSixComputerPos(int& col, int& row);
BOOL ScanTwo(int side);
int WhoWin(int state);
BOOL ScanLtoRFive(int side); // 左至右
BOOL ScanTtoBFive(int side); // 上至下
BOOL ScanLTtoRbFive(int side); // 左上至右下
BOOL ScanLBtoRtFive(int side); // 左下至右上
// 對應六連掃描函式...
private:
int m_nWhoFirst, m_nGoStyle, m_nResult;
int m_chessman[MAX_X][MAX_Y]; // 棋盤狀態陣列
// 輔助座標變數...
};
Scan*Six 系列函式預判更長距離威脅開發環境:Windows 2000 + Visual C++ 6.0
原始碼下載:https://www.vckbase.com/code/downcode.asp?id=2607