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,22 +633,22 @@ void GameState::incrementMoveAmt() {
bool GameState::prelimWinCheck() {
// Check if the game is preliminarily won:
// This occurs when there are no cards in the draw or throwaway piles,
// and all cards in the tableau are revealed. Such games are essentially won,
// as the cards only need to be moved to the foundation piles.
bool prelimWin = m_drawPile.isEmpty() && m_throwawayPile.isEmpty();
// This occurs when all cards in the tableau are revealed.
// Games in this state are essentially won, as the cards
// only need to be moved to the foundation piles.
if (prelimWin) {
for (const auto& column : std::as_const(m_columns)) {
for (const ColumnSlot* card : column) {
if (!card->isRevealed()) {
prelimWin = false;
break;
}
}
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 ColumnSlot* card : column) {
if (!card->isRevealed()) {
prelimWin = false;
break;
}
}
if (!prelimWin)
break;
}
if (prelimWin == m_prelimWin)