fix stock flip up and stock recycle
This commit is contained in:
+14
-4
@@ -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
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user