diff --git a/src/card_game.rs b/src/card_game.rs index 12b225d..603eed2 100644 --- a/src/card_game.rs +++ b/src/card_game.rs @@ -182,6 +182,13 @@ impl Pile { pub fn pop(&mut self) -> Option { self.face_up.pop() } + pub fn pop_flip_up(&mut self) -> Option { + let card = self.face_up.pop()?; + if self.face_up.is_empty() { + self.flip_up(); + } + Some(card) + } pub fn take_range>(&mut self, range: R) -> Stack { // if self.face_up.get(range).is_none() { // return None; diff --git a/src/klondike.rs b/src/klondike.rs index 4c4e807..b6f2f29 100644 --- a/src/klondike.rs +++ b/src/klondike.rs @@ -365,16 +365,16 @@ impl KlondikeState { fn take_top_card(&mut self, src: KlondikePile) -> Option { match src { KlondikePile::Tableau(tableau) => match tableau { - Tableau::Tableau1 => self.tableau1.pop(), - Tableau::Tableau2 => self.tableau2.pop(), - Tableau::Tableau3 => self.tableau3.pop(), - Tableau::Tableau4 => self.tableau4.pop(), - Tableau::Tableau5 => self.tableau5.pop(), - Tableau::Tableau6 => self.tableau6.pop(), - Tableau::Tableau7 => self.tableau7.pop(), + Tableau::Tableau1 => self.tableau1.pop_flip_up(), + Tableau::Tableau2 => self.tableau2.pop_flip_up(), + Tableau::Tableau3 => self.tableau3.pop_flip_up(), + Tableau::Tableau4 => self.tableau4.pop_flip_up(), + Tableau::Tableau5 => self.tableau5.pop_flip_up(), + Tableau::Tableau6 => self.tableau6.pop_flip_up(), + Tableau::Tableau7 => self.tableau7.pop_flip_up(), }, KlondikePile::Foundation(foundation) => self.foundations[foundation as usize].pop(), - KlondikePile::Stock => self.stock.pop(), + KlondikePile::Stock => self.stock.pop_flip_up(), } } fn extend>(&mut self, dst: KlondikePile, cards: I) {