47 lines
1.3 KiB
Haskell
47 lines
1.3 KiB
Haskell
module Cartes where
|
|
import Data.Set as Set
|
|
|
|
data ValeurCouleur = As | Deux | Trois | Quatre | Cinq | Six | Sept | Huit | Neuf | Dix | Valet | Cavalier | Dame | Roi deriving (Eq, Ord, Show)
|
|
data Couleur = Pique | Coeur | Carreau | Trefle deriving (Eq, Show, Ord)
|
|
data Carte = Valeur (ValeurCouleur, Couleur) | Atout Int | Excuse deriving (Eq, Ord)
|
|
|
|
instance Show Carte where
|
|
show (Excuse) = "Excuse"
|
|
show (Atout n) = (show n) ++ " d'atout"
|
|
show (Valeur (n,c)) = (show n) ++ " de " ++ (show c)
|
|
|
|
allValeurs = [As, Deux, Trois, Quatre, Cinq, Six, Sept, Huit, Neuf, Dix, Valet, Cavalier, Dame, Roi]
|
|
allCouleurs = [Pique, Coeur, Carreau, Trefle]
|
|
|
|
deck :: Set Carte
|
|
deck = fromList ([Valeur (n,c) | n<-allValeurs, c<-allCouleurs] ++ [Atout n | n<-[1..21]] ++ [Excuse])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------
|
|
------------- List Utils -------------
|
|
--------------------------------------
|
|
replaceNth :: [a] -> Int -> a -> [a]
|
|
replaceNth (e:s) i newElement
|
|
| i==0 = newElement:s
|
|
| otherwise = replaceNth s (i-1) newElement
|
|
|
|
toPentuple :: [a] -> (a,a,a,a,a)
|
|
toPentuple [j1,j2,j3,j4,j5] = (j1,j2,j3,j4,j5)
|
|
|
|
fst5 :: (a,b,c,d,e) -> a
|
|
fst5 (x,y,z,t,u) = x
|
|
snd5 :: (a,b,c,d,e) -> b
|
|
snd5 (x,y,z,t,u) = y
|
|
thr5 :: (a,b,c,d,e) -> c
|
|
thr5 (x,y,z,t,u) = z
|
|
frh5 :: (a,b,c,d,e) -> d
|
|
frh5 (x,y,z,t,u) = t
|
|
fih5 :: (a,b,c,d,e) -> e
|
|
fih5 (x,y,z,t,u) = u
|