diff --git a/lib/CardDeck.hs b/lib/CardDeck.hs new file mode 100644 index 0000000..bf3817c --- /dev/null +++ b/lib/CardDeck.hs @@ -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 + diff --git a/lib/Shuffle.hs b/lib/Shuffle.hs new file mode 100644 index 0000000..6f349c6 --- /dev/null +++ b/lib/Shuffle.hs @@ -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 diff --git a/lib/VoorbeeldModule.hs b/lib/VoorbeeldModule.hs deleted file mode 100644 index 63dfdf3..0000000 --- a/lib/VoorbeeldModule.hs +++ /dev/null @@ -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" diff --git a/patience.cabal b/patience.cabal index 3d62c4d..3b89f9e 100644 --- a/patience.cabal +++ b/patience.cabal @@ -1,19 +1,19 @@ name: patience version: 1.0.0 -author: Author name here +author: Tibo De Peuter cabal-version: 1.12 build-type: Simple library hs-source-dirs: lib - build-depends: base >= 4.7 && <5 - exposed-modules: VoorbeeldModule + build-depends: base >= 4.7 && <5, random >= 1.1 && < 1.4 + exposed-modules: CardDeck, Shuffle executable patience main-is: Main.hs hs-source-dirs: src default-language: Haskell2010 - build-depends: base >= 4.7 && <5, patience + build-depends: base >= 4.7 && <5, gloss >= 1.11 && < 1.14, gloss-juicy >= 0.2.3, patience test-suite patience-test type: exitcode-stdio-1.0 diff --git a/stack.yaml b/stack.yaml index 2c311ed..9ee77d1 100644 --- a/stack.yaml +++ b/stack.yaml @@ -35,7 +35,8 @@ packages: # These entries can reference officially published versions as well as # forks / in-progress versions pinned to a git hash. For example: # -# extra-deps: +extra-deps: +- gloss-juicy-0.2.3@sha256:0c3bca95237cbf91f8b3b1936a0661f1e0457acd80502276d54d6c5210f88b25,1618 # - acme-missiles-0.3 # - git: https://github.com/commercialhaskell/stack.git # commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a