79int CFen::FenFromBoard(std::string &szFen, CPiece::ENUM_QiZi (*board)[10],
82 for(
int j = 0; j < 10; j++)
88 for(
int i = 0; i < 9; i++)
90 CPiece::ENUM_QiZi qz = board[i][j];
91 if(CPiece::IsNoQiZi(qz))
97 szFen += std::to_string(nEmpty);
148 szFen += std::to_string(nEmpty);
156 szFen += std::to_string(nStep);
160int CFen::FenToBoard(
const std::string &szFen, CPiece::ENUM_QiZi (*board)[10],
161 char &side,
int &nStep)
167 while(nPos < szFen.size())
169 char c = szFen.at(nPos++);
172 board[i][j] = CPiece::RChe;
177 board[i][j] = CPiece::RMa;
182 board[i][j] = CPiece::RXiang;
186 board[i][j] = CPiece::RShi;
190 board[i][j] = CPiece::RShuai;
194 board[i][j] = CPiece::RPao;
198 board[i][j] = CPiece::RBing;
202 board[i][j] = CPiece::BChe;
207 board[i][j] = CPiece::BMa;
212 board[i][j] = CPiece::BXiang;
216 board[i][j] = CPiece::BShi;
220 board[i][j] = CPiece::BShuai;
224 board[i][j] = CPiece::BPao;
228 board[i][j] = CPiece::BBing;
234 if(j > 10) bExit =
true;
242 i += atoi(n.c_str());
248 char c = szFen.at(nPos);
249 if(
'b' == c ||
'B' == c)
255 n += szFen.substr(nPos, szFen.size() - nPos);
256 nStep = atoi(n.c_str());
260int CFen::FenFromStartGame(std::string &szFen,
261 std::vector<CChessGame::strStartGame> startGame,
265 if(startGame.empty())
return -1;
267 CPiece::ENUM_QiZi board[9][10];
269 for (i = 0; i < 9; i++)
270 for (j = 0; j < 10; j++)
272 board[i][j] = CPiece::NoQiZi;
275 for(
auto &it: startGame)
277 board[it.i][it.j] = it.qz;
281 if(nRet)
return nRet;
282 return FenFromBoard(szFen, board, side, nStep);
static int CheckGame(const CPiece::ENUM_QiZi board[][10])
检测布局是否合法, 使用标准棋盘布局,红下黑上
CFen()
作者:康林 kl222@126.com