From 9ca1cdd5340792f3a4ef03326eb82eb6e3a4ca5e Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 8 Nov 2022 10:29:30 +0100 Subject: [PATCH] Added visibility to cards --- lib/CardDeck.hs | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/lib/CardDeck.hs b/lib/CardDeck.hs index bf3817c..b98d32e 100644 --- a/lib/CardDeck.hs +++ b/lib/CardDeck.hs @@ -1,6 +1,13 @@ -module CardDeck ( - generateCards, - generateShuffledCards +module CardDeck +( Card +, CardStatus(..) +, Stack + +, generateDeck +, generateShuffledDeck +, showCard +, hideCard +, flipCard ) where import Shuffle @@ -30,17 +37,31 @@ data CardValue = Ace | NoneValue deriving (Show, Enum, Eq) --- A card has a type and a value -type Card = (CardType, CardValue) +data CardStatus = Hidden + | Visible + deriving (Show) --- A deck of cards -type Deck = [Card] +-- A card has a type and a value and is either shown or hidden. +type Card = (CardType, CardValue, CardStatus) -generateCards :: Deck -generateCards = [(cType, cValue) | cType <- types, cValue <- values] +-- A stack of cards +type Stack = [Card] + +-- Generate a standard 52-card deck, given by CardValue and CardType +generateDeck :: Stack +generateDeck = [(cType, cValue, Hidden) | cType <- types, cValue <- values] where types = init $ enumFrom Clubs values = init $ enumFrom Ace -generateShuffledCards :: Deck -generateShuffledCards = shuffle generateCards +generateShuffledDeck :: Stack +generateShuffledDeck = shuffle generateDeck +showCard :: Card -> Card +showCard (t, v, _) = (t,v,Visible) + +hideCard :: Card -> Card +hideCard (t, v, _) = (t,v,Hidden) + +flipCard :: Card -> Card +flipCard c@(_, _, Visible) = hideCard c +flipCard c@(_, _, Hidden) = showCard c