feat(game): add Player

This commit is contained in:
Kieran Kihn
2025-11-16 19:52:09 +08:00
parent efb80c3b40
commit 1b9ff0b413
3 changed files with 134 additions and 0 deletions

View File

@@ -8,6 +8,7 @@ find_package(ftxui CONFIG REQUIRED)
add_executable(uno-game src/main.cpp
src/game/Card.cpp
src/game/CardTile.cpp
src/game/Player.cpp
src/common/utils.cpp
)
target_link_libraries(uno-game
@@ -18,6 +19,7 @@ target_link_libraries(uno-game
add_library(uno-game-lib src/game/Card.cpp
src/game/CardTile.cpp
src/game/Player.cpp
src/common/utils.cpp
)

54
src/game/Player.cpp Normal file
View File

@@ -0,0 +1,54 @@
/**
* @file
*
* @author Yuzhe Guo
* @date 2025.11.15
*/
#include "Player.h"
#include <utility>
namespace UNO::GAME {
HandCard::HandCard(const std::array<Card, 7> &cards)
{
for (const auto &card : cards) {
cards_.insert(card);
}
}
const std::multiset<Card> &HandCard::getCards() const
{
return cards_;
}
void HandCard::draw(const Card &card)
{
cards_.insert(card);
}
void HandCard::draw(const std::vector<Card> &cards)
{
for (const auto &card : cards) {
cards_.insert(card);
}
}
Card HandCard::play(const std::multiset<Card>::iterator &it)
{
const Card card = *it;
cards_.erase(it);
return card;
}
bool HandCard::isEmpty() const
{
return cards_.empty();
}
Player::Player(std::string &name) : name_(std::move(name)), handCard_(nullptr) {}
const std::string &Player::getName() const
{
return this->name_;
}
} // namespace UNO::GAME

78
src/game/Player.h Normal file
View File

@@ -0,0 +1,78 @@
/**
* @file Player.h
*
* 玩家
*
* @author Yuzhe Guo
* @date 2025.11.15
*/
#ifndef UNO_GAME_PLAYER_H
#define UNO_GAME_PLAYER_H
#include <array>
#include <set>
#include <vector>
#include "Card.h"
namespace UNO::GAME {
/**
* 玩家手牌
*/
class HandCard {
private:
std::multiset<Card> cards_;
public:
explicit HandCard(const std::array<Card, 7> &cards);
/**
* 获得当前手牌
* @return 当前手牌的集合
*/
[[nodiscard]] const std::multiset<Card> &getCards() const;
/**
* 摸一张牌
* @param card 摸的牌
*/
void draw(const Card &card);
/**
* 摸多张牌
* @param cards 摸的牌
*/
void draw(const std::vector<Card> &cards);
/**
* 打出一张牌
* @param it 要打出的手牌的迭代器
* @return 打出的手牌
*/
Card play(const std::multiset<Card>::iterator &it);
/**
* @return 手牌是否为空
*/
[[nodiscard]] bool isEmpty() const;
};
/**
* 玩家
*/
class Player {
private:
std::string name_;
public:
HandCard *handCard_;
explicit Player(std::string &name);
/**
* @return 返回玩家名字
*/
[[nodiscard]] const std::string &getName() const;
};
} // namespace UNO::GAME
#endif // UNO_GAME_PLAYER_H