學習C++有比較長一段時間了。閑著沒事寫了一個五子棋的稚形。目前基本已經完成本機雙人對戰功能,包括悔棋,標記當前下棋位置等。以后準備進一步完善以下功能:
1、網絡對戰功能(包括GameClient與GameServer類,可以了解Socket編程)。
2、人機對戰功能(目前還沒有好的思路)。
棋盤等界面基本都是一筆筆畫出來的,有的是加載圖片。沒有什么技術含量,主要是比較繁瑣,權當對以前學習的Windows消息,畫圖等的復習。
主要用到了以下幾個類:
棋子類(包括棋子的顏色與棋子是否使能):
1 class CChessMan
2 {
3 public:
4 CChessMan()
5 {
6 Reset();
7 }
8
9 void Reset()
10 {
11 Enable = false;
12 Color = BLACK;
13 }
14
15 bool Enable;
16 COLORREF Color;
17 };
棋盤類(管理各個棋子,判斷是否五子一線等):
1 class CTable
2 {
3 public:
4 CTable();
5
6 void ResetTable();
7
8 void SetChessMan(int x, int y);
9 CChessMan GetChessMan(int x, int y) const;
10
11 GAMESTATE GetRunState() const;
12 void SetRunState(GAMESTATE State);
13
14 bool GetLastChessMan(POINT &p) const;
15
16 void RegretLastStep();
17
18 WINNER_SIDE GetWhiteSideWinFlag() const;
19
20 void SetGameMode( GAME_MODE Mode );
21
22 private:
23 bool JudgeWinner(int x, int y) const;
24
25 bool JudgeRowChessMan(int x, int y) const;
26 bool JudgeColumnChessMan(int x, int y) const;
27 bool JudgeLeftChessMan(int x, int y) const;
28 bool JudgeRightChessMan(int x, int y) const;
29
30 bool CalcChessmanNum(CChessMan* pChessMan, int Pos) const;
31
32 void ChangeState();
33
34 private:
35 COLORREF Color; //當前下棋的棋子顏色
36 GAMESTATE State; //當前游戲狀態Runing,Waiting,GameOver
37
38 CChessMan pChessMan[NumOfLine][NumOfLine]; //初始化棋盤上所有棋子
39 stack<POINT> RecordStack; //記錄下棋軌跡,主要為悔棋使用
40
41 WINNER_SIDE Winner; //白棋與黑棋哪方獲勝
42 GAME_MODE Mode; //模式,目前還只支持本機模式,預留以后網絡對戰時使用
43 };
具體怎么實現,還是看代碼了。環境(Windows Xp + Visual Studio 2005)
截個圖:

目前還比較粗糙,以后以上二個功能完善后,再刷新上傳的代碼。歡迎大家提出好的意見,TKS!
五子棋源碼:
http://www.shnenglu.com/Files/bujiwu/ChessMan.rar