fix stock flip up and stock recycle

This commit is contained in:
2026-05-15 10:55:58 -07:00
parent 31025964ef
commit 24b94e8dfa
2 changed files with 26 additions and 8 deletions
+14 -4
View File
@@ -152,18 +152,28 @@ impl Pile {
face_up: Stack::new(), face_up: Stack::new(),
} }
} }
pub fn flip_it_and_reverse_it(&mut self) {
self.swap_up_down();
self.face_up.reverse();
}
pub fn swap_up_down(&mut self) { pub fn swap_up_down(&mut self) {
core::mem::swap(&mut self.face_up, &mut self.face_down); core::mem::swap(&mut self.face_up, &mut self.face_down);
} }
pub fn flip_up(&mut self) {
if let Some(card) = self.face_down.pop() {
self.face_up.push(card);
}
}
pub fn is_empty(&self) -> bool { pub fn is_empty(&self) -> bool {
self.face_down.is_empty() && self.face_up.is_empty() self.face_down.is_empty() && self.face_up.is_empty()
} }
pub fn pop(&mut self) -> Option<Card> { pub fn pop(&mut self) -> Option<Card> {
let card = self.face_up.pop()?; self.face_up.pop()
if self.face_up.is_empty() {
if let Some(card) = self.face_down.pop() {
self.face_up.push(card);
} }
pub fn pop_flip_up(&mut self) -> Option<Card> {
let card = self.pop()?;
if self.face_up.is_empty() {
self.flip_up();
} }
Some(card) Some(card)
} }
+11 -3
View File
@@ -234,12 +234,20 @@ impl Game for Klondike {
KlondikeInstruction { KlondikeInstruction {
src: KlondikePileId::Stock, src: KlondikePileId::Stock,
dst: KlondikePileId::Stock, dst: KlondikePileId::Stock,
} if self.pile(KlondikePileId::Stock).is_empty() => { } => {
self.pile_mut(KlondikePileId::Stock).swap_up_down(); if self.pile(KlondikePileId::Stock).face_down().is_empty() {
self.pile_mut(KlondikePileId::Stock).flip_it_and_reverse_it();
}else{
self.pile_mut(KlondikePileId::Stock).flip_up();
}
} }
KlondikeInstruction { src, dst } => { KlondikeInstruction { src, dst } => {
let card = self.pile_mut(src).pop().unwrap(); if let Some(card) = self.pile_mut(src).pop_flip_up() {
self.pile_mut(dst).push(card); self.pile_mut(dst).push(card);
} else {
println!("Attempted to move from an empty src");
dbg!(instruction);
}
} }
} }
} }