#ifndef OGLG_GAMEBOARD_H_ #define OGLG_GAMEBOARD_H_ #include #include #include #include #include "PlayerMove.h" #include "pc/pctypes.h" #include "pc/commcode.h" #include "pc/astuple.h" struct PlayerState { Player id; Team team; bool is_defeated; std::deque tasks; PlayerState(); }; class GameBoard { public: GameBoard(pos_t w, pos_t h, const InitInfo &info); const Tile& at(pos_t x, pos_t y) const; Tile& at(pos_t x, pos_t y); bool attack(const PlayerMove &o); void turnUpdate(); void roundUpdate(); std::vector leaderboard() const; bool isTeammate(Player x, Player y) const; Team teamOf(Player x) const; bool isDefeated(Player x) const; std::uint8_t numPlayers() const; std::uint8_t numTeams() const; private: void capitalCaptured(Player target, Player source); void updatedPosition(pos_t x, pos_t y); std::uint8_t n, t; std::vector players; pos_t w, h; std::vector board; std::set updated_tiles; std::set defeated_players; }; #endif