mirror of
https://github.com/kierankihn/uno-game.git
synced 2025-12-27 02:13:18 +08:00
refactor(game): replace player iterator with player ID in GameState functions
This commit is contained in:
@@ -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()
|
||||
{
|
||||
|
||||
@@ -159,9 +159,9 @@ namespace UNO::GAME {
|
||||
[[nodiscard]] const std::vector<PlayerStateType> &getPlayers() const;
|
||||
|
||||
/**
|
||||
* @return 当前玩家对应的 iterator
|
||||
* @return 当前玩家对应的 ID
|
||||
*/
|
||||
[[nodiscard]] std::vector<PlayerStateType>::iterator getCurrentPlayer() const;
|
||||
[[nodiscard]] size_t getCurrentPlayerId() const;
|
||||
|
||||
/**
|
||||
* @return 弃牌堆
|
||||
@@ -206,9 +206,9 @@ namespace UNO::GAME {
|
||||
}
|
||||
|
||||
template<PlayerStateTypeConcept PlayerStateType>
|
||||
std::vector<PlayerStateType>::iterator GameState<PlayerStateType>::getCurrentPlayer() const
|
||||
size_t GameState<PlayerStateType>::getCurrentPlayerId() const
|
||||
{
|
||||
return this->currentPlayer_;
|
||||
return this->currentPlayer_ - this->players_.begin();
|
||||
}
|
||||
|
||||
template<PlayerStateTypeConcept PlayerStateType>
|
||||
|
||||
@@ -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<size_t>(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};
|
||||
|
||||
Reference in New Issue
Block a user