中国象棋控件 v2.0.13
载入中...
搜索中...
未找到
ChessGame.h
1
2#ifndef CHESS_GAME_KL_2020_05_15_
3#define CHESS_GAME_KL_2020_05_15_
4
5#pragma once
6
7#include <vector>
8#include <string>
9#include <map>
10#include <time.h>
11#include "Piece.h"
12#include "chinesechess_export.h"
13
40class CHINESECHESS_EXPORT CChessGame
41{
42public:
43 CChessGame();
44 virtual ~CChessGame();
45
46 // 保存一步
47 // 调整棋局存储大小,用于保存棋局
48 int SaveStep(int i, int j,
49 CPiece::ENUM_QiZi qz,
50 const char* pDescript = nullptr,
51 time_t tm = time(nullptr)); //保存当前步
52 int RevokeStep(); //撤回当前步
53
54 // 只移动指针位置,不改变棋局存储大小。用于复盘
55 int GetPreviouStep(int &i, int &j, CPiece::ENUM_QiZi &qz); //得到上一步
56 int GetNextStep(int &i, int &j, CPiece::ENUM_QiZi &qz); //得到下一步
57
58 time_t GetStartTime();
59 int SetStartTime(const time_t &t);
60 time_t GetEndTime();
61 int SetEndTime(const time_t &t);
62
63 std::string GetRedName();
64 int SetRedName(const char* pszName);
65 std::string GetBlackName();
66 int SetBlackName(const char* pszName);
67
68 std::string GetTag(const std::string &szpTag);
69 int AddTag(const std::string &szTag, const std::string &szVal);
70
71#define MAX_STRING_BUFFER 33
72#define APPNAME "Chinese chess control"
73#define AUTHOR "Author: Kang Lin (kl222@126.com)"
74
75 //文件头
76 struct strFileHead {
77 char szAppName[MAX_STRING_BUFFER]; //程序名,在Restart中设置
78 char szAuthor[MAX_STRING_BUFFER]; //程序作者:康林,在Restart中设置
79 char dwVersion; //版本,在Restart中设置
80 };
81 //注意:为网络字节序
82 struct strFile {
83 strFileHead head;
84 time_t timeStart; //开始下棋的时间,在Restart中设置,注意:为网络字节序
85 time_t timeEnd; //结束下棋的时间,在Restart中设置,注意:为网络字节序
86 char szRedName[MAX_STRING_BUFFER]; //红方用户名
87 char szBlackName[MAX_STRING_BUFFER]; //黑方用户名
88 int iBuShu; //步数,在SaveChess中设置,注意:为网络字节序
89 };
90
101 int SaveChessGame(const char* pFileName); //保存棋局
102 int LoadChessGame(const char* pFileName); //装载棋局,并设置为结束状态
103
104 enum _SavePgnFormat
105 {
106 ICCS,
107 Chinese,
108 WXF
109 };
110 int SaveChessGamePgn(const char* pFileName, _SavePgnFormat f = Chinese);
111 int LoadChessGamePgn(const char* pFileName, _SavePgnFormat f = Chinese);
112
113 //开局
115 {
116 int i;
117 int j;
118 CPiece::ENUM_QiZi qz;
119 };
120 std::vector<strStartGame> m_StartGame; // 棋盘开局
122 static int CheckGame(const CPiece::ENUM_QiZi board[][10]);
128 int GetStartGameBoard(/*[out]*/CPiece::ENUM_QiZi board[][10]);
129
130private:
131 struct strCODE{
132 char step[3]; //棋子和相应的位置 @see QiZiBianMa
133 };
134 struct strStep {
135 strCODE code;
136 time_t tm; //走棋时间
137 std::string szDescript; //这一步的描述信息
138 };
139 typedef enum _ENUM_BianMa {
140 BianMa,
141 JieMa
142 } ENUM_BianMa;
143 int QiZiBianMa(int *i, int *j, CPiece::ENUM_QiZi *qz, strCODE *pCode, ENUM_BianMa bianma = BianMa);
144
145 int WriteStringToFile(std::ofstream &o, std::string &s);
146 int ReadStringFromFile(std::ifstream &i, std::string &s);
147
148 int m_nIndex; //走棋步数
149 bool m_bFuPang; //复盘标志
150 std::vector<strStep> m_ChessGame; //棋局
151
152 time_t m_tmStart; //开始时间
153 time_t m_tmEnd; //结束时间
154 std::string m_szRedName; //红方名
155 std::string m_szBlackName; //黑方名
156 std::map<std::string, std::string> m_Tags; //保存棋局的标签部分,标签用来描述此局的信息
157
158};
159
160#endif //CHESS_GAME_KL_2020_05_15_
棋局类 完成棋局的加载、保存、复盘等对棋局的操作 注意:棋盘布局:详见《象棋竞赛规则(2011)》第一章 第1条 红棋在下,黑棋在上,左上角为[0][0],右下角为[9][10]
Definition ChessGame.h:41