From 4046abd65635e70c885f998dcdbc513c052e7587 Mon Sep 17 00:00:00 2001 From: szdytom Date: Sun, 4 Feb 2024 21:53:16 +0800 Subject: [PATCH] add player info methods of GameBoard Signed-off-by: szdytom --- processor/logic/GameBoard.cpp | 48 ++++++++++++++++++++++++++++++----- processor/logic/GameBoard.h | 3 +++ 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/processor/logic/GameBoard.cpp b/processor/logic/GameBoard.cpp index c242a63..d0fdb44 100644 --- a/processor/logic/GameBoard.cpp +++ b/processor/logic/GameBoard.cpp @@ -62,22 +62,56 @@ void GameBoard::capitalCaptured(Player tt, Player sc) { } bool GameBoard::isTeammate(Player x, Player y) const { - // TODO -} - -PlayerState::PlayerState() { - is_defeated = false; + return teamOf(x) == teamOf(y); } void GameBoard::turnUpdate() { - // TODO + for (pos_t x = 0; x < h; ++x) { + for (pos_t y = 0; y < w; ++y) { + auto &tile = at(x, y); + if (tile.owner == neutral_player) + continue; + + if (tile.type == TileType::Stronghold || tile.type == TileType::Capital) + tile.unit += 1; + + if (tile.type == TileType::Swamp) { + tile.unit -= 1; + if (tile.unit == 0) + tile.owner = neutral_player; + } + } + } } void GameBoard::roundUpdate() { - // TODO + for (pos_t x = 0; x < h; ++x) { + for (pos_t y = 0; y < w; ++y) { + auto &tile = at(x, y); + if (tile.owner == neutral_player) + continue; + tile.unit += 1; + } + } } void GameBoard::updatedPosition(pos_t x, pos_t y) { updated_tiles.emplace(x, y); } +Team GameBoard::teamOf(Player x) const { + return players[x].team; +} + +std::uint8_t GameBoard::numPlayers() const { + return n; +} + +std::uint8_t GameBoard::numTeams() const { + return t; +} + +PlayerState::PlayerState() { + is_defeated = false; +} + diff --git a/processor/logic/GameBoard.h b/processor/logic/GameBoard.h index cc8a853..ebbdf21 100644 --- a/processor/logic/GameBoard.h +++ b/processor/logic/GameBoard.h @@ -30,6 +30,9 @@ public: 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);