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