diff options
Diffstat (limited to 'Userland')
-rw-r--r-- | Userland/Games/Hearts/Player.cpp | 16 | ||||
-rw-r--r-- | Userland/Games/Hearts/Player.h | 7 |
2 files changed, 16 insertions, 7 deletions
diff --git a/Userland/Games/Hearts/Player.cpp b/Userland/Games/Hearts/Player.cpp index c36ee8e3cf..92c8706845 100644 --- a/Userland/Games/Hearts/Player.cpp +++ b/Userland/Games/Hearts/Player.cpp @@ -11,18 +11,13 @@ namespace Hearts { -size_t Player::pick_lead_card(Function<bool(Card&)> valid_play, Function<bool(Card&)> prefer_card, - Function<bool(Card&)> lower_value_card_in_play) +Vector<CardWithIndex> Player::hand_sorted_by_points_and_value() const { - struct CardWithIndex { - RefPtr<Card> card; - size_t index; - }; Vector<CardWithIndex> sorted_hand; for (size_t i = 0; i < hand.size(); i++) { auto& card = hand[i]; if (card) - sorted_hand.empend(card, i); + sorted_hand.empend(*card, i); } quick_sort(sorted_hand, [](auto& cwi1, auto& cwi2) { if (hearts_card_points(*cwi2.card) < hearts_card_points(*cwi1.card)) @@ -31,6 +26,13 @@ size_t Player::pick_lead_card(Function<bool(Card&)> valid_play, Function<bool(Ca return true; return false; }); + return sorted_hand; +} + +size_t Player::pick_lead_card(Function<bool(Card&)> valid_play, Function<bool(Card&)> prefer_card, + Function<bool(Card&)> lower_value_card_in_play) +{ + auto sorted_hand = hand_sorted_by_points_and_value(); if constexpr (HEARTS_DEBUG) { dbgln("Sorted hand:"); diff --git a/Userland/Games/Hearts/Player.h b/Userland/Games/Hearts/Player.h index 11d33c5e53..73435d5109 100644 --- a/Userland/Games/Hearts/Player.h +++ b/Userland/Games/Hearts/Player.h @@ -7,12 +7,18 @@ #pragma once #include "Helpers.h" +#include <AK/QuickSort.h> #include <LibCards/Card.h> using Cards::Card; namespace Hearts { +struct CardWithIndex { + NonnullRefPtr<Card> card; + size_t index; +}; + struct Player { AK_MAKE_NONMOVABLE(Player); @@ -29,6 +35,7 @@ public: Optional<size_t> pick_specific_card(Card::Type type, CardValue value); size_t pick_last_card(); bool has_card_of_type(Card::Type type); + Vector<CardWithIndex> hand_sorted_by_points_and_value() const; void sort_hand() { quick_sort(hand, hearts_card_less); } |