Added a deck of cards functionality
This commit is contained in:
parent
58f9a03123
commit
7a4ef79bf9
5 changed files with 76 additions and 15 deletions
46
lib/CardDeck.hs
Normal file
46
lib/CardDeck.hs
Normal file
|
@ -0,0 +1,46 @@
|
|||
module CardDeck (
|
||||
generateCards,
|
||||
generateShuffledCards
|
||||
) 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)
|
||||
|
||||
-- A card has a type and a value
|
||||
type Card = (CardType, CardValue)
|
||||
|
||||
-- A deck of cards
|
||||
type Deck = [Card]
|
||||
|
||||
generateCards :: Deck
|
||||
generateCards = [(cType, cValue) | cType <- types, cValue <- values]
|
||||
where types = init $ enumFrom Clubs
|
||||
values = init $ enumFrom Ace
|
||||
|
||||
generateShuffledCards :: Deck
|
||||
generateShuffledCards = shuffle generateCards
|
||||
|
24
lib/Shuffle.hs
Normal file
24
lib/Shuffle.hs
Normal file
|
@ -0,0 +1,24 @@
|
|||
module Shuffle (
|
||||
shuffle
|
||||
) where
|
||||
|
||||
import Data.List
|
||||
import System.Random
|
||||
|
||||
seed = 20
|
||||
|
||||
-- Shuffle a list of values.
|
||||
shuffle :: [a] -> [a]
|
||||
shuffle l = map (l !!) $ generateIndices $ length l
|
||||
|
||||
-- Generate indices to map the elements of a list over so that they
|
||||
-- are randomly shuffled.
|
||||
generateIndices :: Int -> [Int]
|
||||
generateIndices size = take size uniqueList
|
||||
where randomList = randomRs (0, size - 1) randomGen
|
||||
uniqueList = nub randomList
|
||||
|
||||
-- Generate a random generator
|
||||
-- TODO Écht random maken?
|
||||
randomGen :: StdGen
|
||||
randomGen = mkStdGen seed
|
|
@ -1,10 +0,0 @@
|
|||
module VoorbeeldModule
|
||||
( hoi -- oplijsting van de publieke functies - als je deze lijst en de haakjes weglaat, wordt alles publiek
|
||||
, hallo
|
||||
) where
|
||||
|
||||
hoi :: String
|
||||
hoi = "Hoi"
|
||||
|
||||
hallo :: String
|
||||
hallo = "Hallo"
|
Reference in a new issue