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);
|
this->player_.setName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t ClientGameState::getSelfId() const
|
||||||
|
{
|
||||||
|
return this->self_ - this->players_.begin();
|
||||||
|
}
|
||||||
|
|
||||||
void ClientGameState::nextPlayer()
|
void ClientGameState::nextPlayer()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -159,9 +159,9 @@ namespace UNO::GAME {
|
|||||||
[[nodiscard]] const std::vector<PlayerStateType> &getPlayers() const;
|
[[nodiscard]] const std::vector<PlayerStateType> &getPlayers() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return 当前玩家对应的 iterator
|
* @return 当前玩家对应的 ID
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] std::vector<PlayerStateType>::iterator getCurrentPlayer() const;
|
[[nodiscard]] size_t getCurrentPlayerId() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return 弃牌堆
|
* @return 弃牌堆
|
||||||
@@ -206,9 +206,9 @@ namespace UNO::GAME {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<PlayerStateTypeConcept PlayerStateType>
|
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>
|
template<PlayerStateTypeConcept PlayerStateType>
|
||||||
|
|||||||
@@ -46,8 +46,7 @@ namespace UNO::SERVER {
|
|||||||
throw std::invalid_argument("Invalid message payload type from client");
|
throw std::invalid_argument("Invalid message payload type from client");
|
||||||
}
|
}
|
||||||
if (this->serverGameState_.getServerGameStage() == GAME::ServerGameStage::IN_GAME
|
if (this->serverGameState_.getServerGameStage() == GAME::ServerGameStage::IN_GAME
|
||||||
&& this->networkIdToGameId.at(playerId)
|
&& this->networkIdToGameId.at(playerId) != this->serverGameState_.getCurrentPlayerId()) {
|
||||||
!= this->serverGameState_.getCurrentPlayer() - this->serverGameState_.getPlayers().begin()) {
|
|
||||||
throw std::invalid_argument("Invalid player message: not this player's turn");
|
throw std::invalid_argument("Invalid player message: not this player's turn");
|
||||||
}
|
}
|
||||||
if (playerMessage.getMessagePayloadType() == NETWORK::MessagePayloadType::DRAW_CARD) {
|
if (playerMessage.getMessagePayloadType() == NETWORK::MessagePayloadType::DRAW_CARD) {
|
||||||
@@ -67,7 +66,7 @@ namespace UNO::SERVER {
|
|||||||
for (const auto &player : serverGameState_.getPlayers()) {
|
for (const auto &player : serverGameState_.getPlayers()) {
|
||||||
players.emplace_back(player.getName(), player.getRemainingCardCount(), player.getIsUno());
|
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++) {
|
for (size_t i = 0; i < playerCount; i++) {
|
||||||
NETWORK::InitGamePayload payload = {
|
NETWORK::InitGamePayload payload = {
|
||||||
i, players, serverGameState_.getDiscardPile(), serverGameState_.getPlayers()[i].getCards(), currentPlayerIndex};
|
i, players, serverGameState_.getDiscardPile(), serverGameState_.getPlayers()[i].getCards(), currentPlayerIndex};
|
||||||
|
|||||||
Reference in New Issue
Block a user