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 (
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