Improve preliminary win check

This commit is contained in:
ItsDrike 2024-12-09 23:27:05 +01:00
parent d68b2ecbcb
commit 5a2e7d5465
Signed by: ItsDrike
GPG key ID: FA2745890B7048C0

View file

@ -633,12 +633,13 @@ void GameState::incrementMoveAmt() {
bool GameState::prelimWinCheck() { bool GameState::prelimWinCheck() {
// Check if the game is preliminarily won: // Check if the game is preliminarily won:
// This occurs when there are no cards in the draw or throwaway piles, // This occurs when all cards in the tableau are revealed.
// and all cards in the tableau are revealed. Such games are essentially won, // Games in this state are essentially won, as the cards
// as the cards only need to be moved to the foundation piles. // only need to be moved to the foundation piles.
bool prelimWin = m_drawPile.isEmpty() && m_throwawayPile.isEmpty();
if (prelimWin) { bool prelimWin = true; // Assume a preliminary win unless proven otherwise.
// Check if all tableau cards are revealed
for (const auto& column : std::as_const(m_columns)) { for (const auto& column : std::as_const(m_columns)) {
for (const ColumnSlot* card : column) { for (const ColumnSlot* card : column) {
if (!card->isRevealed()) { if (!card->isRevealed()) {
@ -649,7 +650,6 @@ bool GameState::prelimWinCheck() {
if (!prelimWin) if (!prelimWin)
break; break;
} }
}
if (prelimWin == m_prelimWin) if (prelimWin == m_prelimWin)
return m_prelimWin; return m_prelimWin;