From 647d0f9f8a2b64bb6d0d273b71d1b4474e48576d Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sun, 23 May 2021 14:21:33 +0200 Subject: [PATCH] Hearts: Fix sorting function for lead cards The pick_lead_card() function sometimes picks the incorrect card because the sorted_hand vector wasn't being sorted properly. --- Userland/Games/Hearts/Player.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Userland/Games/Hearts/Player.cpp b/Userland/Games/Hearts/Player.cpp index 021d79001f..4e3bd7839f 100644 --- a/Userland/Games/Hearts/Player.cpp +++ b/Userland/Games/Hearts/Player.cpp @@ -6,6 +6,7 @@ #include "Player.h" #include "Helpers.h" +#include #include namespace Hearts { @@ -23,19 +24,28 @@ size_t Player::pick_lead_card(Function valid_play, Function= hearts_card_points(*cwi2.card)) + if (hearts_card_points(*cwi2.card) < hearts_card_points(*cwi1.card)) return true; - if (hearts_card_value(*cwi1.card) >= hearts_card_value(*cwi2.card)) + if (hearts_card_points(*cwi1.card) == hearts_card_points(*cwi2.card) && hearts_card_value(*cwi2.card) < hearts_card_value(*cwi1.card)) return true; return false; }); + if constexpr (HEARTS_DEBUG) { + dbgln("Sorted hand:"); + for (auto& cwi : sorted_hand) + dbgln("{}", *cwi.card); + dbgln("----"); + } + size_t last_index = -1; for (auto& cwi : sorted_hand) { if (!valid_play(*cwi.card)) continue; - if (prefer_card(*cwi.card)) + if (prefer_card(*cwi.card)) { + dbgln_if(HEARTS_DEBUG, "Preferring card {}", *cwi.card); return cwi.index; + } last_index = cwi.index; } return last_index;