Nouvelle façon plus propre de gérer les 5 cas différents, et prise en compte de l'excuse.
This commit is contained in:
parent
cae980e209
commit
5291863f7e
@ -35,13 +35,3 @@ replaceNth (e:s) i 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
|
||||
|
||||
@ -106,66 +106,40 @@ newtype EtatPartie j1 j2 j3 j4 j5 = EtatPartie (Int,(j1,j2,j3,j4,j5),[[Carte]],[
|
||||
|
||||
|
||||
jouerPliAux :: (JoueurIA j1, JoueurIA j2, JoueurIA j3, JoueurIA j4, JoueurIA j5) => Int -> (j1,j2,j3,j4,j5) -> [[Carte]] -> [Carte] -> [[Carte]] -> (EtatPartie j1 j2 j3 j4 j5, [Carte])
|
||||
jouerPliAux main etats jeux pli points = (EtatPartie (vraiIndiceGagnant, etats, [delete c jeu | (c,jeu)<-(zip (rotate (5-main) pli) jeux)], replaceNth points vraiIndiceGagnant (pli ++ (points !! vraiIndiceGagnant))), pli)
|
||||
jouerPliAux main etats jeux pli points = (EtatPartie (vraiIndiceGagnant, etats, newJeux, calculerPoints pli points jeux vraiIndiceGagnant), pli)
|
||||
where
|
||||
indiceGagnant = 5-(fromJust $ elemIndex (fromJust $ gagnantPli pli) (pli))
|
||||
vraiIndiceGagnant = (mod (main+indiceGagnant-1) 5)
|
||||
newJeux = [delete c jeu | (c,jeu)<-(zip (rotate (5-main) pli) jeux)]
|
||||
|
||||
|
||||
-- Le premier élément de la liste de joueur (le plus profond) est le premier joueur
|
||||
-- Renvoie le nouvel état de la partie ainsi qu'une copie du pli joué.
|
||||
jouerPli :: (JoueurIA j1, JoueurIA j2, JoueurIA j3, JoueurIA j4, JoueurIA j5) => (EtatPartie j1 j2 j3 j4 j5) -> (EtatPartie j1 j2 j3 j4 j5, [Carte])
|
||||
jouerPli (EtatPartie (0,joueurs,jeux,points)) = jouerPliAux 0 etats jeux pli points -- TODO l'excuse n'est pas gérée
|
||||
|
||||
calculerPoints :: [Carte] -> [[Carte]] -> [[Carte]] -> Int -> [[Carte]]
|
||||
calculerPoints pli points jeux vraiIndiceGagnant
|
||||
| elem Excuse pli = let indiceExcuse = (fromJust $ findIndex (elem Excuse) jeux) in replaceNth (replaceNth points vraiIndiceGagnant (delete Excuse newPoints)) indiceExcuse (Excuse:(points !! indiceExcuse))-- On ne donne pas de demi point de compensation
|
||||
| otherwise = replaceNth points vraiIndiceGagnant newPoints
|
||||
where
|
||||
(c1,e1) = jouer (fst5 joueurs) []
|
||||
(c2,e2) = jouer (snd5 joueurs) (c1:[])
|
||||
(c3,e3) = jouer (thr5 joueurs) (c2:c1:[])
|
||||
(c4,e4) = jouer (frh5 joueurs) (c3:c2:c1:[])
|
||||
(c5,e5) = jouer (fih5 joueurs) (c4:c3:c2:c1:[])
|
||||
newPoints = (pli ++ (points !! vraiIndiceGagnant))
|
||||
-- Dans cette fonction, jr1 est le premier joueur à JOUER LE PLI, il s'agit en réalité du ième joueur
|
||||
jouerPliAAux :: (JoueurIA j1, JoueurIA j2, JoueurIA j3, JoueurIA j4, JoueurIA j5) => int -> (j1,j2,j3,j4,j5) -> ([Carte],(j1,j2,j3,j4,j5))
|
||||
jouerPliAAux i (jr1,jr2,jr3,jr4,jr5) = (pli,(e1,e2,e3,e4,e5))
|
||||
where
|
||||
(c1,e1) = jouer jr1 []
|
||||
(c2,e2) = jouer jr2 (c1:[])
|
||||
(c3,e3) = jouer jr3 (c2:c1:[])
|
||||
(c4,e4) = jouer jr4 (c3:c2:c1:[])
|
||||
(c5,e5) = jouer jr5 (c4:c3:c2:c1:[])
|
||||
pli = c5:c4:c3:c2:c1:[]
|
||||
etats = (finTour e1 pli, finTour e2 pli, finTour e3 pli, finTour e4 pli, finTour e5 pli)
|
||||
|
||||
jouerPli (EtatPartie (1,joueurs,jeux,points)) = jouerPliAux 1 etats jeux pli points -- TODO l'excuse n'est pas gérée
|
||||
where
|
||||
(c2,e2) = jouer (snd5 joueurs) []
|
||||
(c3,e3) = jouer (thr5 joueurs) (c2:[])
|
||||
(c4,e4) = jouer (frh5 joueurs) (c3:c2:[])
|
||||
(c5,e5) = jouer (fih5 joueurs) (c4:c3:c2:[])
|
||||
(c1,e1) = jouer (fst5 joueurs) (c5:c4:c3:c2:[])
|
||||
pli = c1:c5:c4:c3:c2:[]
|
||||
etats = (finTour e1 pli, finTour e2 pli, finTour e3 pli, finTour e4 pli, finTour e5 pli)
|
||||
|
||||
jouerPli (EtatPartie (2,joueurs,jeux,points)) = jouerPliAux 2 etats jeux pli points -- TODO l'excuse n'est pas gérée
|
||||
where
|
||||
(c3,e3) = jouer (thr5 joueurs) []
|
||||
(c4,e4) = jouer (frh5 joueurs) (c3:[])
|
||||
(c5,e5) = jouer (fih5 joueurs) (c4:c3:[])
|
||||
(c1,e1) = jouer (fst5 joueurs) (c5:c4:c3:[])
|
||||
(c2,e2) = jouer (snd5 joueurs) (c1:c5:c4:c3:[])
|
||||
pli = c2:c1:c5:c4:c3:[]
|
||||
etats = (finTour e1 pli, finTour e2 pli, finTour e3 pli, finTour e4 pli, finTour e5 pli)
|
||||
|
||||
jouerPli (EtatPartie (3,joueurs,jeux,points)) = jouerPliAux 3 etats jeux pli points -- TODO l'excuse n'est pas gérée
|
||||
where
|
||||
(c4,e4) = jouer (frh5 joueurs) []
|
||||
(c5,e5) = jouer (fih5 joueurs) (c4:[])
|
||||
(c1,e1) = jouer (fst5 joueurs) (c5:c4:[])
|
||||
(c2,e2) = jouer (snd5 joueurs) (c1:c5:c4:[])
|
||||
(c3,e3) = jouer (thr5 joueurs) (c2:c1:c5:c4:[])
|
||||
pli = c3:c2:c1:c5:c4:[]
|
||||
etats = (finTour e1 pli, finTour e2 pli, finTour e3 pli, finTour e4 pli, finTour e5 pli)
|
||||
|
||||
jouerPli (EtatPartie (4,joueurs,jeux,points)) = jouerPliAux 4 etats jeux pli points -- TODO l'excuse n'est pas gérée
|
||||
where
|
||||
(c5,e5) = jouer (fih5 joueurs) []
|
||||
(c1,e1) = jouer (fst5 joueurs) (c5:[])
|
||||
(c2,e2) = jouer (snd5 joueurs) (c1:c5:[])
|
||||
(c3,e3) = jouer (thr5 joueurs) (c2:c1:c5:[])
|
||||
(c4,e4) = jouer (frh5 joueurs) (c3:c2:c1:c5:[])
|
||||
pli = c4:c3:c2:c1:c5:[]
|
||||
etats = (finTour e1 pli, finTour e2 pli, finTour e3 pli, finTour e4 pli, finTour e5 pli)
|
||||
|
||||
|
||||
|
||||
|
||||
-- Dans cette fonction, jr1 est le premier joueur de l'index, celui qui commence le pli est le i-ème
|
||||
-- On est obligé d'écrire les cinq règles différement, parce que
|
||||
jouerPli :: (JoueurIA j1, JoueurIA j2, JoueurIA j3, JoueurIA j4, JoueurIA j5) => (EtatPartie j1 j2 j3 j4 j5) -> (EtatPartie j1 j2 j3 j4 j5, [Carte])
|
||||
jouerPli (EtatPartie (0,(jr1,jr2,jr3,jr4,jr5),jeux,points)) = let (pli,(e1,e2,e3,e4,e5))=jouerPliAAux 0 (jr1,jr2,jr3,jr4,jr5) in jouerPliAux 0 (e1,e2,e3,e4,e5) jeux pli points
|
||||
jouerPli (EtatPartie (1,(jr1,jr2,jr3,jr4,jr5),jeux,points)) = let (pli,(e2,e3,e4,e5,e1))=jouerPliAAux 1 (jr2,jr3,jr4,jr5,jr1) in jouerPliAux 1 (e1,e2,e3,e4,e5) jeux pli points
|
||||
jouerPli (EtatPartie (2,(jr1,jr2,jr3,jr4,jr5),jeux,points)) = let (pli,(e3,e4,e5,e1,e2))=jouerPliAAux 2 (jr3,jr4,jr5,jr1,jr2) in jouerPliAux 2 (e1,e2,e3,e4,e5) jeux pli points
|
||||
jouerPli (EtatPartie (3,(jr1,jr2,jr3,jr4,jr5),jeux,points)) = let (pli,(e4,e5,e1,e2,e3))=jouerPliAAux 3 (jr4,jr5,jr1,jr2,jr3) in jouerPliAux 3 (e1,e2,e3,e4,e5) jeux pli points
|
||||
jouerPli (EtatPartie (4,(jr1,jr2,jr3,jr4,jr5),jeux,points)) = let (pli,(e5,e1,e2,e3,e4))=jouerPliAAux 4 (jr5,jr1,jr2,jr3,jr4) in jouerPliAux 4 (e1,e2,e3,e4,e5) jeux pli points
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user