#include #include #include #include #include #include using namespace std; vector const colors { "spades", "hearts", "diamonds", "clubs" }; vector const values { "ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "jack", "queen", "king" }; struct Card { // 1 är ess // 11 är knekt // 12 är dam // 13 är kung int value{1}; string color{colors[0]}; void print() const { cout << values[value-1] << " of " << color; } }; class Deck { public: Deck() : cards(52) { int index{0}; for (int value{1}; value <= 13; ++value) { for (auto& color : colors) { cards[index] = Card{value, color}; ++index; } } } void shuffle(random_device& rd) { std::shuffle(cards.begin(), cards.end(), rd); } Card draw() { Card result {cards.back()}; cards.pop_back(); return result; } vector draw(int N) { auto start {cards.end() - N}; vector result{start, cards.end()}; cards.erase(start, cards.end()); return result; } private: vector cards{}; }; int sum_hand(vector const& hand) { int sum{0}; for (auto const& c : hand) { if (c.value > 10) sum += 10; else sum += c.value; } return sum; } int play(string const& name, Deck& deck, int limit) { auto hand{deck.draw(2)}; cout << name << " hand:" << endl; for (auto const& c : hand) { c.print(); cout << endl; } while (sum_hand(hand) <= limit) { Card c{deck.draw()}; cout << name << " drew "; c.print(); cout << endl; hand.push_back(c); } int sum{sum_hand(hand)}; if (sum > 21) { cout << name << " is bust!" << endl; } else { cout << name << " stands with " << sum << " points!" << endl; } return sum; } int main() { // du får inte skapa fler random_device än denna random_device rd; Deck deck{}; deck.shuffle(rd); int player {play("player", deck, 17)}; bool player_won{false}; if (player == 21) { player_won = true; } else if (player < 21) { int dealer {play("dealer", deck, player)}; if (dealer <= player || dealer > 21) { player_won = true; } } if (player_won) { cout << "player won!" << endl; } else { cout << "dealer won!" << endl; } }