#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(std::uint8_t n, std::uint8_t t, pos_t w, pos_t h, const std::vector &player_team); 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(); bool isTeammate(Player x, Player y) const; Team teamOf(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::vector defeated_players; }; #endif