57 lines
1.9 KiB
Haskell

module Cartes where
import Data.Set as Set
import Data.List (map)
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)
data TypePrise = Prise | Garde | GardeSans | GardeContre | Chelem deriving (Eq, Ord)
data Annonce = MisereTete | MisereAtout | Poignee [Carte] | DoublePoignee [Carte] | TriplePoignee [Carte]
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])
------ Valeur des cartes ------
valeurCarte :: Carte -> Int
valeurCarte (Valeur (Roi, _)) = 9
valeurCarte (Valeur (Dame, _)) = 7
valeurCarte (Valeur (Cavalier, _)) = 5
valeurCarte (Valeur (Valet, _)) = 3
valeurCarte (Atout (1)) = 9
valeurCarte (Atout (21)) = 9
valeurCarte Excuse = 9
valeurCarte _ = 1
valeurTas :: [Carte] -> Int
valeurTas l = sum $ Data.List.map valeurCarte l
--------------------------------------
------------- List Utils -------------
--------------------------------------
replaceNth :: [a] -> Int -> a -> [a]
replaceNth [] _ _ = error "Impossible d'accéder au i-ème élément de la liste vide :/ "
replaceNth (e:s) i newElement
| i==0 = newElement:s
| otherwise = e:(replaceNth s (i-1) newElement)
addToNth :: [[a]] -> Int -> [a] -> [[a]]
addToNth lliste i toAdd = replaceNth lliste i (toAdd ++ (lliste !! i))
toPentuple :: [a] -> (a,a,a,a,a)
toPentuple [j1,j2,j3,j4,j5] = (j1,j2,j3,j4,j5)