From ff175389aba66100ee707fbfba758142a8ba9865 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Thu, 29 Sep 2022 11:27:17 +0100 Subject: [PATCH] Solitaire: Make `auto_move_eligible_cards_to_foundations()` iterative This doesn't need to be recursive, so let's make it not so. --- Userland/Games/Solitaire/Game.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Userland/Games/Solitaire/Game.cpp b/Userland/Games/Solitaire/Game.cpp index d424e59785..fc61d00e69 100644 --- a/Userland/Games/Solitaire/Game.cpp +++ b/Userland/Games/Solitaire/Game.cpp @@ -486,19 +486,19 @@ bool Game::attempt_to_move_card_to_foundations(CardStack& from) void Game::auto_move_eligible_cards_to_foundations() { - bool card_was_moved = false; + while (true) { + bool card_was_moved = false; + for (auto& to_check : stacks()) { + if (to_check.type() != CardStack::Type::Normal && to_check.type() != CardStack::Type::Play) + continue; - for (auto& to_check : stacks()) { - if (to_check.type() != CardStack::Type::Normal && to_check.type() != CardStack::Type::Play) - continue; + if (attempt_to_move_card_to_foundations(to_check)) + card_was_moved = true; + } - if (attempt_to_move_card_to_foundations(to_check)) - card_was_moved = true; + if (!card_was_moved) + break; } - - // If at least one card was moved, check again to see if now any additional cards can now be moved - if (card_was_moved) - auto_move_eligible_cards_to_foundations(); } void Game::paint_event(GUI::PaintEvent& event)