mirror of
https://github.com/kierankihn/uno-game.git
synced 2025-12-27 02:13:18 +08:00
feat(game): add Player
This commit is contained in:
@@ -8,6 +8,7 @@ find_package(ftxui CONFIG REQUIRED)
|
|||||||
add_executable(uno-game src/main.cpp
|
add_executable(uno-game src/main.cpp
|
||||||
src/game/Card.cpp
|
src/game/Card.cpp
|
||||||
src/game/CardTile.cpp
|
src/game/CardTile.cpp
|
||||||
|
src/game/Player.cpp
|
||||||
src/common/utils.cpp
|
src/common/utils.cpp
|
||||||
)
|
)
|
||||||
target_link_libraries(uno-game
|
target_link_libraries(uno-game
|
||||||
@@ -18,6 +19,7 @@ target_link_libraries(uno-game
|
|||||||
|
|
||||||
add_library(uno-game-lib src/game/Card.cpp
|
add_library(uno-game-lib src/game/Card.cpp
|
||||||
src/game/CardTile.cpp
|
src/game/CardTile.cpp
|
||||||
|
src/game/Player.cpp
|
||||||
src/common/utils.cpp
|
src/common/utils.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
54
src/game/Player.cpp
Normal file
54
src/game/Player.cpp
Normal 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
78
src/game/Player.h
Normal 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
|
||||||
Reference in New Issue
Block a user