Added visibility to cards
This commit is contained in:
parent
7a4ef79bf9
commit
9ca1cdd534
1 changed files with 32 additions and 11 deletions
|
@ -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
|
||||
|
|
Reference in a new issue