中国象棋控件 2.0.15
载入中...
搜索中...
未找到
ChineseChess.h
浏览该文件的文档.
1
10#ifndef CHINESE_CHESS_H_KL_2020_05_13__
11#define CHINESE_CHESS_H_KL_2020_05_13__
12
13#pragma once
14
15#include "GoRule.h"
16#include "ChessGame.h"
17
18#include "chinesechess_export.h"
19
32class CHINESECHESS_EXPORT CChineseChess
33{
34public:
36 virtual ~CChineseChess();
37
41 typedef enum _ENUM_BoardLayout{
42 NoQi = 0,
43 OnlyTopBlack = 1,
44 OnlyBottomRed = 2,
45 SwapRedBetweenBlack = 4,
46 OnlyTopRed = OnlyBottomRed | SwapRedBetweenBlack,
47 OnlyBottomBlack = OnlyTopBlack | SwapRedBetweenBlack,
48 TopBlackAndBottomRed = OnlyTopBlack | OnlyBottomRed,
49 TopRedAndBottomBlack = TopBlackAndBottomRed | SwapRedBetweenBlack
50 } ENUM_BoardLayout;
51 int SetBoardLayout(ENUM_BoardLayout layout);
52 ENUM_BoardLayout GetBoardLayout();
53
68 bool GoChess(int i, int j, bool bNext = false); //走棋
69
70 // 复盘操作
71 int NextStep(); //下一步
72 int PreviouStep(); //上一步
73
79 virtual int SaveChessGame(const char* pszFile);
85 virtual int LoadChessGame(const char* pszFile);
86 time_t GetStartTime();
87 int SetStartTime(const time_t &t);
88 time_t GetEndTime();
89 int SetEndTime(const time_t &t);
90 std::string GetRedName();
91 int SetRedName(const char* pszName);
92 std::string GetBlackName();
93 int SetBlackName(const char* pszName);
94 std::string GetGameTag(const std::string &tag);
95 int AddGameTag(const std::string &szTag, const std::string &szVal);
96
97 int EnablePromptSound(bool sound = true);
98 bool getEnablePromptSound();
99 int EnablePromptMessage(bool bMsg = true);
100 bool getEnablePromptMessage();
101
102protected:
104
107 JiangJun, //< 将军
108 Eat, //< 吃子
109 Go, //< 走棋
110 NoGo, //< 不能走
111 Select //< 选棋
112 };
113 virtual int onPromptSound(PROMPT_SOUND sound = NoGo) = 0;
115 virtual int onPromptMessage(CGoRule::ENUM_ReturnValue val) = 0;
117 virtual int onCleanPrompt(int i, int j) = 0;
119 virtual int onDrawPrompt(int i, int j) = 0;
121 // @see m_ChessBoard
122 virtual int onGoChess(int i, int j, CPiece::ENUM_QiZi chess) = 0;
124
125private:
126 // 判断当前着法是否合法
127 bool IsGoChess(int i, int j);
128
129 CGoRule m_GoRule; //下棋规则
130 CChessGame m_Game; //棋局
131
132 bool m_bPromptSound;
133 bool m_bPromptMessage;
134
135protected:
157 CPiece::ENUM_QiZi m_ChessBoard[9][10]; //棋盘 m_ChessBoard[i][j]
158 ENUM_BoardLayout m_BoardLayout; //棋盘布局
159
160 //走棋状态,行棋,红方先行:详见《象棋竞赛规则(2011)》第一章 第2条
161 typedef enum _ENUM_WalkState {
162 RedReadly,
163 RedWalked,
164 BlackReadly,
165 BlackWalked
166 } ENUM_WalkState;
167 ENUM_WalkState m_WalkState; //走棋状态(红方选棋,红方走棋,黑方先棋,黑方走棋)
168
169 // 提示框
170 // 上一步棋的位置
171 int m_PreviouPositionX;
172 int m_PreviouPositionY;
173 int m_CurrentPositionX;
174 int m_CurrentPositionY;
175 int CleanPrompt(int &i, int &j); //清理指定位置的提示框
176
177 bool IsValidPosition(int i, int j);
178
179 int Initial();
180
181 // 因为棋局是用的标准棋盘布局(红下黑上),而界面可以是非标准布局
182 // 所以是交换布局时,需要转换
183 int ConvertQiPang(const int &i, const int &j, int &x, int &y);
184};
185
186#endif //CHINESE_CHESS_H_KL_2020_05_13__
棋局类 完成棋局的加载、保存、复盘等对棋局的操作 注意:棋盘布局:详见《象棋竞赛规则(2011)》第一章 第1条 红棋在下,黑棋在上,左上角为[0][0],右下角为[9][10]
Definition ChessGame.h:42
中国象棋类
PROMPT_SOUND
提示音
virtual int onPromptMessage(CGoRule::ENUM_ReturnValue val)=0
提示错误消息
virtual int onGoChess(int i, int j, CPiece::ENUM_QiZi chess)=0
走棋事件
enum CChineseChess::_ENUM_BoardLayout ENUM_BoardLayout
标准棋盘布局:详见《象棋竞赛规则(2011)》第一章 第1条。红棋在下,黑棋在上。 界面可以支持非标准棋盘布局(红在上,黑在下)
virtual int onDrawPrompt(int i, int j)=0
画提示框
virtual int onCleanPrompt(int i, int j)=0
清除提示框
_ENUM_BoardLayout
标准棋盘布局:详见《象棋竞赛规则(2011)》第一章 第1条。红棋在下,黑棋在上。 界面可以支持非标准棋盘布局(红在上,黑在下)
文件名:GoRule.h 功 能:走棋规则 编译器:Visual C++ 6.0 作 者:康 林 版 本:1.0.0.1 日 期:2004-10-18 时 间:9:55:40
Definition GoRule.h:24
enum CPiece::_ENUM_QiZi ENUM_QiZi
棋子枚举值 四个位表示棋子,最左1位表示颜色