中国象棋控件 v2.0.13
载入中...
搜索中...
未找到
ChineseChess.h
浏览该文件的文档.
1
8#ifndef CHINESE_CHESS_H_KL_2020_05_13__
9#define CHINESE_CHESS_H_KL_2020_05_13__
10
11#pragma once
12
13#include "GoRule.h"
14#include "ChessGame.h"
15
16#include "chinesechess_export.h"
17
30class CHINESECHESS_EXPORT CChineseChess
31{
32public:
34 virtual ~CChineseChess();
35
39 typedef enum _ENUM_BoardLayout{
40 NoQi = 0,
41 OnlyTopBlack = 1,
42 OnlyBottomRed = 2,
43 SwapRedBetweenBlack = 4,
44 OnlyTopRed = OnlyBottomRed | SwapRedBetweenBlack,
45 OnlyBottomBlack = OnlyTopBlack | SwapRedBetweenBlack,
46 TopBlackAndBottomRed = OnlyTopBlack | OnlyBottomRed,
47 TopRedAndBottomBlack = TopBlackAndBottomRed | SwapRedBetweenBlack
48 } ENUM_BoardLayout;
49 int SetBoardLayout(ENUM_BoardLayout layout);
50 ENUM_BoardLayout GetBoardLayout();
51
66 bool GoChess(int i, int j, bool bNext = false); //走棋
67
68 // 复盘操作
69 int NextStep(); //下一步
70 int PreviouStep(); //上一步
71
77 virtual int SaveChessGame(const char* pszFile);
83 virtual int LoadChessGame(const char* pszFile);
84 time_t GetStartTime();
85 int SetStartTime(const time_t &t);
86 time_t GetEndTime();
87 int SetEndTime(const time_t &t);
88 std::string GetRedName();
89 int SetRedName(const char* pszName);
90 std::string GetBlackName();
91 int SetBlackName(const char* pszName);
92 std::string GetGameTag(const std::string &tag);
93 int AddGameTag(const std::string &szTag, const std::string &szVal);
94
95 int EnablePromptSound(bool sound = true);
96 bool getEnablePromptSound();
97 int EnablePromptMessage(bool bMsg = true);
98 bool getEnablePromptMessage();
99
100protected:
101 // 下列虚拟函数由界面实现类完成
102
105 JiangJun, //< 将军
106 Eat, //< 吃子
107 Go, //< 走棋
108 NoGo, //< 不能走
109 Select //< 选棋
110 };
111 virtual int onPromptSound(PROMPT_SOUND sound = NoGo) = 0;
113 virtual int onPromptMessage(CGoRule::ENUM_ReturnValue val) = 0;
115 virtual int onCleanPrompt(int i, int j) = 0;
117 virtual int onDrawPrompt(int i, int j) = 0;
119 // @see m_ChessBoard
120 virtual int onGoChess(int i, int j, CPiece::ENUM_QiZi chess) = 0;
121
122private:
123 // 判断当前着法是否合法
124 bool IsGoChess(int i, int j);
125
126 CGoRule m_GoRule; //下棋规则
127 CChessGame m_Game; //棋局
128
129 bool m_bPromptSound;
130 bool m_bPromptMessage;
131
132protected:
154 CPiece::ENUM_QiZi m_ChessBoard[9][10]; //棋盘 m_ChessBoard[i][j]
155 ENUM_BoardLayout m_BoardLayout; //棋盘布局
156
157 //走棋状态,行棋,红方先行:详见《象棋竞赛规则(2011)》第一章 第2条
158 typedef enum _ENUM_WalkState {
159 RedReadly,
160 RedWalked,
161 BlackReadly,
162 BlackWalked
163 } ENUM_WalkState;
164 ENUM_WalkState m_WalkState; //走棋状态(红方选棋,红方走棋,黑方先棋,黑方走棋)
165
166 // 提示框
167 // 上一步棋的位置
168 int m_PreviouPositionX;
169 int m_PreviouPositionY;
170 int m_CurrentPositionX;
171 int m_CurrentPositionY;
172 int CleanPrompt(int &i, int &j); //清理指定位置的提示框
173
174 bool IsValidPosition(int i, int j);
175
176 int Initial();
177
178 // 因为棋局是用的标准棋盘布局(红下黑上),而界面可以是非标准布局
179 // 所以是交换布局时,需要转换
180 int ConvertQiPang(const int &i, const int &j, int &x, int &y);
181};
182
183#endif //CHINESE_CHESS_H_KL_2020_05_13__
棋局类 完成棋局的加载、保存、复盘等对棋局的操作 注意:棋盘布局:详见《象棋竞赛规则(2011)》第一章 第1条 红棋在下,黑棋在上,左上角为[0][0],右下角为[9][10]
Definition ChessGame.h:41
中国象棋类
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