#pragma once #include "card.hpp" #include #include #include #include #include #include #include #include class Deck { public: std::list kinds = {"C", "D", "S", "H"}; std::list values = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}; std::vector cards; size_t length = 0; Deck(std::string cardString = "", bool shuffle=true) { for (auto &kind : kinds) { for (auto &value : values) { std::string key = kind + value; Card card(key); this->cards.push_back(card); } } if(shuffle == true) { std::random_device rd; std::mt19937 g(rd()); std::shuffle(this->cards.begin(), this->cards.end(), g); } std::string key; std::stringstream ss(cardString); while (std::getline(ss, key, ',')) { if (this->deleteCard(key)) { this->putCard(key); } } this->length = this->cards.size(); } bool deleteCard(std::string key) { for (int i = 0; i < this->cards.size(); i++) { if (this->cards[i].key == key) { this->cards.erase(this->cards.begin() + i); return true; } } return false; } void putCard(std::string key) { this->deleteCard(key); Card card = Card(key); this->cards.insert(this->cards.begin(), card); } Card getCard() { Card card = this->cards[0]; this->cards.erase(this->cards.begin(), this->cards.begin() + 1); this->length = this->cards.size(); return card; } void print() { for (auto &card : this->cards) { std::cout << card.key << std::endl; } } };