mirror of
https://gitlab.com/manzerbredes/ochess.git
synced 2025-04-07 02:26:29 +02:00
65 lines
1.8 KiB
C++
65 lines
1.8 KiB
C++
#pragma once
|
|
#include "CGEditor.hpp"
|
|
#include "ChessArbiter.hpp"
|
|
#include "ochess.hpp"
|
|
#include "pgnp.hpp"
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
/**
|
|
* @brief Create your custom half move class
|
|
*
|
|
* The implementation of the class should give you
|
|
* an overview of how to keep your move sync with the one of CGEditor
|
|
*
|
|
*/
|
|
class HalfMove : public cgeditor::CGEHalfMove {
|
|
HalfMove *parent = NULL;
|
|
HalfMove *mainline = NULL;
|
|
chessarbiter::ChessArbiter arbiter;
|
|
std::vector<HalfMove *> variations;
|
|
std::string fen;
|
|
char capture;
|
|
std::string GetPGN(bool needDots);
|
|
void BuildAndVerify(HalfMove *m, std::string fen);
|
|
|
|
public:
|
|
HalfMove(std::string move);
|
|
HalfMove(std::string move, std::string fen);
|
|
HalfMove(pgnp::HalfMove *m);
|
|
|
|
~HalfMove();
|
|
/// @brief Add variation to current move
|
|
void AddVariation(HalfMove *m);
|
|
/// @brief Remove the specified child from mainline and/or variations
|
|
void RemoveChild(HalfMove *m);
|
|
void AddMove(HalfMove *m);
|
|
/// @brief Set value of the mailine
|
|
void SetMainline(HalfMove *m);
|
|
/// @brief Set this move as mainline
|
|
void SetAsMainline();
|
|
/// @brief Promote the current move and submove
|
|
void Promote();
|
|
/// @brief Check if current half move is within a variation
|
|
bool IsVariation();
|
|
/// @brief Get the root of a variation
|
|
HalfMove *GetRoot();
|
|
/// @brief Get parent of the current move
|
|
HalfMove *GetParent();
|
|
HalfMove *GetMainline();
|
|
std::map<char, std::uint8_t> GetLineCaptures();
|
|
|
|
/// @brief Set parent of the current move
|
|
void SetParent(HalfMove *m);
|
|
std::string GetFen();
|
|
void SetFen(std::string fen);
|
|
void SetCapture(char c);
|
|
std::string GetPGN();
|
|
|
|
/**
|
|
* @brief Build current move
|
|
* Verify and play all the moves in the game
|
|
* while building the fen for each move
|
|
*/
|
|
void BuildAndVerify(std::string initial_fen);
|
|
};
|