学习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.cppblog.com/Files/bujiwu/ChessMan.rar