#pragma once #include "ChessArbiter.hpp" #include "HalfMove.hpp" #include "ochess.hpp" #include class Game { std::string board; std::string initial_fen; std::string result; std::unordered_map tags; HalfMove *moves; HalfMove *current; chessarbiter::ChessArbiter arbiter; public: Game(); Game(std::string fen); Game(HalfMove *m, std::string initial_fen); std::string GetBoard(); std::string GetTag(std::string tagname); void SetTag(std::string tagname, std::string value); void DeleteTag(std::string tagname); HalfMove *GetCurrentMove(); HalfMove *GetMoves(); std::string GetFen(); bool Play(std::string move); bool IsBlackToPlay(); void Previous(); void Next(); void DeleteMove(HalfMove *m); void PromoteMove(HalfMove *m); void SetMoveAsMainline(HalfMove *m); void SetCurrent(HalfMove *m); std::vector ListTags(); std::string GetPGN(); void SetResult(std::string result); void BuildAndVerify(); };