67 lines
1.4 KiB
Haskell
67 lines
1.4 KiB
Haskell
module CardDeck
|
|
( Card
|
|
, CardStatus(..)
|
|
, Stack
|
|
|
|
, generateDeck
|
|
, generateShuffledDeck
|
|
, showCard
|
|
, hideCard
|
|
, flipCard
|
|
) where
|
|
|
|
import Shuffle
|
|
|
|
-- Colors of cards
|
|
data CardType = Clubs
|
|
| Diamonds
|
|
| Hearts
|
|
| Spades
|
|
| NoneType
|
|
deriving (Show, Enum, Eq)
|
|
|
|
-- Values of cards
|
|
data CardValue = Ace
|
|
| Two
|
|
| Three
|
|
| Four
|
|
| Five
|
|
| Six
|
|
| Seven
|
|
| Eight
|
|
| Nine
|
|
| Ten
|
|
| Jack
|
|
| Queen
|
|
| King
|
|
| NoneValue
|
|
deriving (Show, Enum, Eq)
|
|
|
|
data CardStatus = Hidden
|
|
| Visible
|
|
deriving (Show)
|
|
|
|
-- A card has a type and a value and is either shown or hidden.
|
|
type Card = (CardType, CardValue, CardStatus)
|
|
|
|
-- 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
|
|
|
|
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
|