1
Fork 0

Added visibility to cards

This commit is contained in:
Tibo De Peuter 2022-11-08 10:29:30 +01:00
parent 7a4ef79bf9
commit 9ca1cdd534

View file

@ -1,6 +1,13 @@
module CardDeck ( module CardDeck
generateCards, ( Card
generateShuffledCards , CardStatus(..)
, Stack
, generateDeck
, generateShuffledDeck
, showCard
, hideCard
, flipCard
) where ) where
import Shuffle import Shuffle
@ -30,17 +37,31 @@ data CardValue = Ace
| NoneValue | NoneValue
deriving (Show, Enum, Eq) deriving (Show, Enum, Eq)
-- A card has a type and a value data CardStatus = Hidden
type Card = (CardType, CardValue) | Visible
deriving (Show)
-- A deck of cards -- A card has a type and a value and is either shown or hidden.
type Deck = [Card] type Card = (CardType, CardValue, CardStatus)
generateCards :: Deck -- A stack of cards
generateCards = [(cType, cValue) | cType <- types, cValue <- values] 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 where types = init $ enumFrom Clubs
values = init $ enumFrom Ace values = init $ enumFrom Ace
generateShuffledCards :: Deck generateShuffledDeck :: Stack
generateShuffledCards = shuffle generateCards 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