diff --git a/src/game/GameState.cpp b/src/game/GameState.cpp index 8d67401..92558db 100644 --- a/src/game/GameState.cpp +++ b/src/game/GameState.cpp @@ -107,6 +107,10 @@ namespace UNO::GAME { this->player_.setName(name); } + size_t ClientGameState::getSelfId() const + { + return this->self_ - this->players_.begin(); + } void ClientGameState::nextPlayer() { diff --git a/src/game/GameState.h b/src/game/GameState.h index c5c6ef7..9a9665e 100644 --- a/src/game/GameState.h +++ b/src/game/GameState.h @@ -159,9 +159,9 @@ namespace UNO::GAME { [[nodiscard]] const std::vector &getPlayers() const; /** - * @return 当前玩家对应的 iterator + * @return 当前玩家对应的 ID */ - [[nodiscard]] std::vector::iterator getCurrentPlayer() const; + [[nodiscard]] size_t getCurrentPlayerId() const; /** * @return 弃牌堆 @@ -206,9 +206,9 @@ namespace UNO::GAME { } template - std::vector::iterator GameState::getCurrentPlayer() const + size_t GameState::getCurrentPlayerId() const { - return this->currentPlayer_; + return this->currentPlayer_ - this->players_.begin(); } template diff --git a/src/server/UnoServer.cpp b/src/server/UnoServer.cpp index fde9676..e92293c 100644 --- a/src/server/UnoServer.cpp +++ b/src/server/UnoServer.cpp @@ -46,8 +46,7 @@ namespace UNO::SERVER { throw std::invalid_argument("Invalid message payload type from client"); } if (this->serverGameState_.getServerGameStage() == GAME::ServerGameStage::IN_GAME - && this->networkIdToGameId.at(playerId) - != this->serverGameState_.getCurrentPlayer() - this->serverGameState_.getPlayers().begin()) { + && this->networkIdToGameId.at(playerId) != this->serverGameState_.getCurrentPlayerId()) { throw std::invalid_argument("Invalid player message: not this player's turn"); } if (playerMessage.getMessagePayloadType() == NETWORK::MessagePayloadType::DRAW_CARD) { @@ -67,7 +66,7 @@ namespace UNO::SERVER { for (const auto &player : serverGameState_.getPlayers()) { players.emplace_back(player.getName(), player.getRemainingCardCount(), player.getIsUno()); } - size_t currentPlayerIndex = static_cast(serverGameState_.getCurrentPlayer() - serverGameState_.getPlayers().begin()); + size_t currentPlayerIndex = serverGameState_.getCurrentPlayerId(); for (size_t i = 0; i < playerCount; i++) { NETWORK::InitGamePayload payload = { i, players, serverGameState_.getDiscardPile(), serverGameState_.getPlayers()[i].getCards(), currentPlayerIndex};