fix ace to foundation

This commit is contained in:
2026-05-15 09:01:03 -07:00
parent f18e8b9b1a
commit ab3cf9b3f3
2 changed files with 26 additions and 9 deletions
+13
View File
@@ -29,6 +29,19 @@ impl Suit {
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct CardValue(u8); pub struct CardValue(u8);
impl CardValue { impl CardValue {
pub const ACE: Self = CardValue(1);
pub const TWO: Self = CardValue(2);
pub const THREE: Self = CardValue(3);
pub const FOUR: Self = CardValue(4);
pub const FIVE: Self = CardValue(5);
pub const SIX: Self = CardValue(6);
pub const SEVEN: Self = CardValue(7);
pub const EIGHT: Self = CardValue(8);
pub const NINE: Self = CardValue(9);
pub const TEN: Self = CardValue(10);
pub const JACK: Self = CardValue(11);
pub const QUEEN: Self = CardValue(12);
pub const KING: Self = CardValue(13);
pub fn checked_add(self, offset: u8) -> Option<CardValue> { pub fn checked_add(self, offset: u8) -> Option<CardValue> {
let new_value = self.0.checked_add(offset)?; let new_value = self.0.checked_add(offset)?;
if 13 < new_value { if 13 < new_value {
+10 -6
View File
@@ -1,5 +1,5 @@
use crate::Rng; use crate::Rng;
use crate::card_game::{Game, Pile, Stack}; use crate::card_game::{CardValue, Game, Pile, Stack};
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct KlondikeConfig {} pub struct KlondikeConfig {}
@@ -106,14 +106,18 @@ impl KlondikeState {
) => ) =>
{ {
// get the top cards // get the top cards
if let Some(src_card) = self.pile(src).face_up().last() if let Some(src_card) = self.pile(src).face_up().last() {
&& let Some(dst_card) = self.pile(dst).face_up().last() match self.pile(dst).face_up().last() {
// destination card exists
Some(dst_card) => {
// suit matches? // suit matches?
&& src_card.suit() == dst_card.suit() src_card.suit() == dst_card.suit()
// value is +1? // value is +1?
&& dst_card.value().checked_add(1) == Some(src_card.value()) && dst_card.value().checked_add(1) == Some(src_card.value())
{ }
true // only ace is allowed to go onto empty foundation
None => src_card.value() == CardValue::ACE,
}
} else { } else {
false false
} }