summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty')
-rw-r--r--macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty794
1 files changed, 427 insertions, 367 deletions
diff --git a/macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty b/macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty
index 5dfd0b5a03..26c2741e4b 100644
--- a/macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty
+++ b/macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty
@@ -1,368 +1,428 @@
-% Author : C. Pierquet
-% licence : Released under the LaTeX Project Public License v1.3c
-% or later, see http://www.latex-project.org/lppl.txtf
-% Poker cards Image's Licence : LGPL-2.1 license https://github.com/htdebeer/SVG-cards
-% Tarot cards Image's Licence : Public Domain https://freesvg.org/deck-of-french-tarot-playing-cards
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{JeuxCartes}[2022/10/26 v0.1.2 Jeux de cartes]
-% 0.1.2 Modification du nom (et de la source) des images de Tarot (CC0)
-% 0.1.1 Ajout de commandes pour des mini-cartes
-% 0.1 Version initiale
-
-%------Packages utiles
-\RequirePackage{graphicx}
-\RequirePackage[table,svgnames]{xcolor}
-\RequirePackage{tikz}
-\RequirePackage{pgf,pgffor}
-\RequirePackage{xfp}
-\RequirePackage{listofitems}
-\RequirePackage{xstring}
-\RequirePackage{xparse}
-\RequirePackage{simplekv}
-\RequirePackage{xinttools}
-\RequirePackage{randomlist}
-\RequirePackage{pifont}
-%librairies tikz
-\usetikzlibrary{calc,scopes}
-%images venant de https://github.com/htdebeer/SVG-cards
-%images venant de https://freesvg.org/deck-of-french-tarot-playing-cards
-
-%------Commande en ligne (includegraphics) via raisebox/rotatebox ou tikz
-\defKV[AffCarteJeu]{%
- Hauteur=\def\AffCarteJeuHauteur{#1},%
- DecalageX=\def\AffCarteJeuDecalageX{#1},%
- DecalageY=\def\AffCarteJeuDecalageY{#1},%
- Rotation=\def\AffCarteJeuRotation{#1},%
- AlignementV=\def\AffCarteJeuAlignementV{#1},%
- TypeJeu=\def\AffCarteJeuType{#1}
-}
-\setKVdefault[AffCarteJeu]{%
- Hauteur=4.25,%
- Tikz=false,%pour placer la commande dans un environnement tikz ou en raisebox,
- TikzAutonome=true,%pour déjà mettre l'image dans du tikz
- DecalageX=0,%
- DecalageY=0,%
- Rotation=0,%
- AlignementV=0.5,%
- TypeJeu=Poker
-}
-
-\NewDocumentCommand\AffCarteJeu{ O{} m }{%1=options,2=cartenommée
- \useKVdefault[AffCarteJeu]%
- \setKV[AffCarteJeu]{#1}%
- %cas poker
- \IfStrEq{\AffCarteJeuType}{Poker}%poker
- {\def\CartePrefixe{CaJ-Poker-}}{}%
- \IfStrEq{\AffCarteJeuType}{Tarot}%tarot
- {\def\CartePrefixe{CaJ-Tarot-}}{}%
- %transformation valign en tikz
- \def\OptionTikzCBB{current bounding box.center}%
- \IfStrEq{\AffCarteJeuAlignementV}{0}%
- {\def\OptionTikzCBB{current bounding box.south}}{}%
- \IfStrEq{\AffCarteJeuAlignementV}{1}%
- {\def\OptionTikzCBB{current bounding box.north}}{}%
- %affichage
- \ifboolKV[AffCarteJeu]{Tikz}%
- {%
- \ifboolKV[AffCarteJeu]{TikzAutonome}%
- {%
- {\tikz[baseline=(\OptionTikzCBB)] \draw (\AffCarteJeuDecalageX,\AffCarteJeuDecalageY) node[above right=0pt,inner sep=0pt,outer sep=0pt,rotate=\AffCarteJeuRotation] {\includegraphics[height=\AffCarteJeuHauteur cm]{\CartePrefixe#2}} ;}%
- }%
- {%
- \begin{scope}[shift={(\AffCarteJeuDecalageX,\AffCarteJeuDecalageY)}]%
- \draw (0,0) node[above right=0pt,inner sep=0pt,outer sep=0pt,rotate=\AffCarteJeuRotation] {\includegraphics[height=\AffCarteJeuHauteur cm]{\CartePrefixe#2}} ;%
- \end{scope}%
- }%
- }%
- {%
- \rotatebox[origin=c]{\AffCarteJeuRotation}{\raisebox{-\AffCarteJeuAlignementV\height}{\includegraphics[height=\AffCarteJeuHauteur cm]{\CartePrefixe#2}}}%
- }%
-}
-
-%------commande main cartes
-\defKV[AffMainCartes]{%
- Hauteur=\def\MainHauteur{#1},%
- EspH=\def\MainDecalH{#1},%
- EspV=\def\MainDecalV{#1},%
- Rotation=\def\MainRotation{#1},%
- TypeJeu=\def\MainJeuType{#1},%
- AlignementV=\def\MainAlignementV{#1}
-}
-\setKVdefault[AffMainCartes]{%
- Hauteur=4.25,%
- EspH=1,%
- EspV=0,%
- Rotation=10,%
- Eventail=false,%
- TypeJeu=Poker,%
- AlignementV=0.5
-}
-
-\NewDocumentCommand\CartesJeu{ O{} m }{%1=options,2=listecartes
- \useKVdefault[AffMainCartes]%
- \setKV[AffMainCartes]{#1}%
- %calculs et traitement des variables
- \ignoreemptyitems%
- \setsepchar{§}%
- \readlist*\ListeCartesMain{#2}%
- \def\NbCartesMain{\ListeCartesMainlen}%nbcartes
- \IfStrEq{\MainJeuType}{Poker}%poker
- {\def\HauteurGenerique{8.5}\def\CarteMainPrefixe{CaJ-Poker-}}{}%
- \IfStrEq{\MainJeuType}{Tarot}%tarot
- {\def\HauteurGenerique{5.5}\def\CarteMainPrefixe{CaJ-Tarot-}}{}%
- \def\EchelleCarteDecalage{\fpeval{\MainHauteur/\HauteurGenerique}}%
- %transformation valign en tikz
- \def\OptionTikzCBB{current bounding box.center}%
- \IfStrEq{\MainAlignementV}{0}%
- {\def\OptionTikzCBB{current bounding box.south}}{}%
- \IfStrEq{\MainAlignementV}{1}%
- {\def\OptionTikzCBB{current bounding box.north}}{}%
- %environnement tikzpicture
- \begin{tikzpicture}[baseline=(\OptionTikzCBB)]%
- \foreach \i in {1,2,...,\ListeCartesMainlen}{%
- \itemtomacro\ListeCartesMain[\i]\CarteMain%
- \ifboolKV[AffMainCartes]{Eventail}%
- {%
- \def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainDecalV*(\i-1)}}%
- \def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainDecalH*(\i-1)}}%
- \def\DecAngleMain{\fpeval{0.5*\NbCartesMain*\MainRotation}}%
- \AffCarteJeu[TypeJeu=\MainJeuType,Tikz,TikzAutonome=false,Hauteur=\MainHauteur,DecalageY=\MainOffset,DecalageX=\SecondOffset,Rotation={\DecAngleMain-(\i-1)*\MainRotation}]{\CarteMain}%
- }%
- {%
- \def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainDecalH*(\i-1)}}%
- \def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainDecalV*(\i-1)}}%
- \AffCarteJeu[TypeJeu=\MainJeuType,Tikz,TikzAutonome=false,Hauteur=\MainHauteur,DecalageX=\MainOffset,DecalageY=\SecondOffset]{\CarteMain}%
- }%
- }%finpour
- \end{tikzpicture}%
-}
-
-%------commande main aléatoire
-\defKV[AffMainAleaCartes]{%
- Hauteur=\def\MainHauteur{#1},%
- EspH=\def\MainDecalH{#1},%
- EspV=\def\MainDecalV{#1},%
- Rotation=\def\MainRotation{#1},%
- TypeJeu=\def\MainJeuType{#1},%
- AlignementV=\def\MainAlignementV{#1}
-}
-\setKVdefault[AffMainAleaCartes]{%
- Hauteur=4.25,%
- EspH=1,%
- EspV=0,%
- Rotation=10,%
- Eventail=false,%
- TypeJeu=Poker,%
- AlignementV=0.5
-}
-
-\xdef\CartesJeuPoker{2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,DK,RK,AK}%
-\xdef\CartesJeuBelote{7P,8P,9P,10P,VP,DP,RP,AP,7T,8T,9T,10T,VT,DT,RT,AT,7C,8C,9C,10C,VC,DC,RC,AC,7K,8K,9K,10K,VK,DK,RK,AK}%
-\xdef\CartesJeuBataille{2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,DK,RK,AK,JN,JR}%
-\xdef\CartesJeuTarot{2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,CP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,CT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,CC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,CK,DK,RK,AK,1AT,2AT,3AT,4AT,5AT,6AT,7AT,8AT,9AT,10AT,11AT,12AT,13AT,14AT,15AT,16AT,17AT,18AT,19AT,20AT,21AT,Exc}%
-\NewList{CartesJeuMelange}
-
-\NewDocumentCommand\CartesJeuAleatoire{ O{} m }{%1=options,2=nbcartes
- \useKVdefault[AffMainAleaCartes]%
- \setKV[AffMainAleaCartes]{#1}%
- %calculs et traitement des variables
- \IfStrEq{\MainJeuType}{Poker}%poker
- {\def\HauteurGenerique{8.5}\def\CarteMainType{Poker}\xdef\CarteDebutRand{\fpeval{randint(0,52-#2)}}}{}%
- \IfStrEq{\MainJeuType}{Bataille}%bataille
- {\def\HauteurGenerique{8.5}\def\CarteMainType{Poker}\xdef\CarteDebutRand{\fpeval{randint(0,54-#2)}}}{}%
- \IfStrEq{\MainJeuType}{Belote}%poker
- {\def\HauteurGenerique{8.5}\def\CarteMainType{Poker}\xdef\CarteDebutRand{\fpeval{randint(0,32-#2)}}}{}%
- \IfStrEq{\MainJeuType}{Tarot}%tarot
- {\def\HauteurGenerique{6.375}\def\CarteMainType{Tarot}\xdef\CarteDebutRand{\fpeval{randint(0,78-#2)}}}{}%
- %échelle relative des cartes
- \def\EchelleCarteDecalage{\fpeval{\MainHauteur/\HauteurGenerique}}%
- %transformation valign en tikz
- \def\OptionTikzCBB{current bounding box.center}%
- \IfStrEq{\MainAlignementV}{0}%
- {\def\OptionTikzCBB{current bounding box.south}}{}%
- \IfStrEq{\MainAlignementV}{1}%
- {\def\OptionTikzCBB{current bounding box.north}}{}%
- %melange du jeu
- \ClearList{CartesJeuMelange}%
- \IfStrEq{\MainJeuType}{Poker}%si c'est le poker
- {%
- \xintFor* ##1 in {\xintCSVtoList{\CartesJeuPoker}}%
- \do{\InsertRandomItem{CartesJeuMelange}{##1}}%
- }%
- {}%
- \IfStrEq{\MainJeuType}{Bataille}%si c'est la bataille
- {%
- \xintFor* ##1 in {\xintCSVtoList{\CartesJeuBataille}}%
- \do{\InsertRandomItem{CartesJeuMelange}{##1}}%
- }%
- {}%
- \IfStrEq{\MainJeuType}{Belote}%si c'est le poker
- {%
- \xintFor* ##1 in {\xintCSVtoList{\CartesJeuBelote}}%
- \do{\InsertRandomItem{CartesJeuMelange}{##1}}%
- }%
- {}%
- \IfStrEq{\MainJeuType}{Tarot}%si c'est le tarot
- {%
- \xintFor* ##1 in {\xintCSVtoList{\CartesJeuTarot}}%
- \do{\InsertRandomItem{CartesJeuMelange}{##1}}%
- }%
- {}%
- %environnement tikzpicture
- \begin{tikzpicture}[baseline=(\OptionTikzCBB)]%
- \foreach \i in {1,2,...,#2}{%
- \GetItem{CartesJeuMelange}{\inteval{\CarteDebutRand+\i-1}}{CarteMainChoisie}%
- %\itemtomacro\ListeCartesMain[\i]\CarteMain%
- \ifboolKV[AffMainAleaCartes]{Eventail}%
- {%
- \def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainDecalV*(\i-1)}}%
- \def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainDecalH*(\i-1)}}%
- \def\DecAngleMain{\fpeval{0.5*#2*\MainRotation}}%
- \AffCarteJeu[TypeJeu=\CarteMainType,Tikz,TikzAutonome=false,Hauteur=\MainHauteur,DecalageY=\MainOffset,DecalageX=\SecondOffset,Rotation={\DecAngleMain-(\i-1)*\MainRotation}]{\CarteMainChoisie}%
- }%
- {%
- \def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainDecalH*(\i-1)}}%
- \def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainDecalV*(\i-1)}}%
- \AffCarteJeu[TypeJeu=\CarteMainType,Tikz,TikzAutonome=false,Hauteur=\MainHauteur,DecalageX=\MainOffset,DecalageY=\SecondOffset]{\CarteMainChoisie}%
- }%
- }%finpour
- \end{tikzpicture}%
-}
-
-%------commande mini-cartes
-\defKV[AffMiniCartes]{%
- Largeur=\def\MiniCarteLargeur{#1},
- FondAtout=\def\MiniCarteFondAtout{#1}
-}
-\setKVdefault[AffMiniCartes]{%
- Largeur=0.55cm,%
- FondAtout=PeachPuff
-}
-
-\NewDocumentCommand\MiniCarteJeu{ O{} m }{%1=options,2=nbcartes
- \useKVdefault[AffMiniCartes]%
- \setKV[AffMiniCartes]{#1}%
- %découpage de l'argument
- \StrCut{#2}{.}\csVal\csCplt%
- %couleur de fond
- \def\csFond{White}%
- \def\csCoul{black}%
- %le cas du 10.11...21
- \IfStrEq{\csVal}{10}{\def\csVal{\scalebox{0.5}[1]{10}}}{}%
- \IfStrEq{\csVal}{11}{\def\csVal{\scalebox{0.5}[1]{11}}}{}%
- \IfStrEq{\csVal}{12}{\def\csVal{\scalebox{0.5}[1]{12}}}{}%
- \IfStrEq{\csVal}{13}{\def\csVal{\scalebox{0.5}[1]{13}}}{}%
- \IfStrEq{\csVal}{14}{\def\csVal{\scalebox{0.5}[1]{14}}}{}%
- \IfStrEq{\csVal}{15}{\def\csVal{\scalebox{0.5}[1]{15}}}{}%
- \IfStrEq{\csVal}{16}{\def\csVal{\scalebox{0.5}[1]{16}}}{}%
- \IfStrEq{\csVal}{17}{\def\csVal{\scalebox{0.5}[1]{17}}}{}%
- \IfStrEq{\csVal}{18}{\def\csVal{\scalebox{0.5}[1]{18}}}{}%
- \IfStrEq{\csVal}{19}{\def\csVal{\scalebox{0.5}[1]{19}}}{}%
- \IfStrEq{\csVal}{20}{\def\csVal{\scalebox{0.5}[1]{20}}}{}%
- \IfStrEq{\csVal}{21}{\def\csVal{\scalebox{0.5}[1]{21}}}{}%
- %le cas du Excuse
- \IfStrEq{#2}{Exc}%
- {\def\csSymb{\ding{168}}\def\csCoul{blue}%
- \def\csVal{\scalebox{0.33}[1]{EXC}}}{}%
- %le cas du Joker
- \IfStrEq{\csVal}{J}%
- {\def\csSymb{\ding{166}}\def\csVal{\scalebox{0.5}[1]{JO}}}{}%
- %si c'est un coeur
- \IfStrEq{\csCplt}{C}%
- {\def\csSymb{\ding{170}}\def\csCoul{red}}{}%
- %si c'est un carreau
- \IfStrEq{\csCplt}{K}%
- {\def\csSymb{\ding{169}}\def\csCoul{red}}{}%
- %si c'est un coeur
- \IfStrEq{\csCplt}{P}%
- {\def\csSymb{\ding{171}}}{}%
- %si c'est un trèfle
- \IfStrEq{\csCplt}{T}%
- {\def\csSymb{\ding{168}}}{}%
- %si c'est un atout 68
- \IfStrEq{\csCplt}{AT}%
- {\def\csFond{\MiniCarteFondAtout}\def\csSymb{\ding{88}}}{}%
- %si c'est un rouge
- \IfStrEq{\csCplt}{R}%
- {\def\csCoul{red}}{}%
- %minicarte
- \tikz[baseline=(char.base)]\node[anchor=north west,line width=0.7pt,draw=Gray,rectangle,rounded corners,inner sep=1.6pt,fill=\csFond,text=\csCoul,font=\ttfamily,minimum width=\MiniCarteLargeur](char){\csVal\scalebox{0.75}[0.75]{\csSymb}};%
-}
-
-%------commande mini-main-cartes
-\defKV[AffMiniMainCartes]{%
- Largeur=\def\MiniMainLargeur{#1},%
- FondAtout=\def\MiniMainFondAtout{#1}
-}
-\setKVdefault[AffMiniMainCartes]{%
- Largeur=0.55cm,%
- FondAtout=PeachPuff
-}
-
-\NewDocumentCommand\MiniCartesJeu{ O{} m }{%1=options,2=liste
- \useKVdefault[AffMiniMainCartes]%
- \setKV[AffMiniMainCartes]{#1}%
- \ignoreemptyitems%
- \setsepchar{§}%
- \readlist*\MiniCartesMain{#2}%
- \foreachitem\MiniCarteAffich\in\MiniCartesMain{%
- \MiniCarteJeu[FondAtout=\MiniMainFondAtout,Largeur=\MiniMainLargeur]{\MiniCarteAffich}%
- }%
-}
-
-%------commande mini-main aléatoire
-\defKV[MiniMainAleaCartes]{%
- Largeur=\def\MiniMainAleaLargeur{#1},%
- TypeJeu=\def\MiniMainAleaType{#1},%
- FondAtout=\def\MiniMainAleaFondAtout{#1}
-}
-\setKVdefault[MiniMainAleaCartes]{%
- Largeur=0.55cm,%
- TypeJeu=Poker,%
- FondAtout=PeachPuff
-}
-
-\xdef\MiniCartesJeuPoker{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K}%
-\xdef\MiniCartesJeuBelote{7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K}%
-\xdef\MiniCartesJeuBataille{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K,J.N,J.R}%
-\xdef\MiniCartesJeuTarot{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,C.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,C.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,C.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,C.K,D.K,R.K,A.K,1.AT,2.AT,3.AT,4.AT,5.AT,6.AT,7.AT,8.AT,9.AT,10.AT,11.AT,12.AT,13.AT,14.AT,15.AT,16.AT,17.AT,18.AT,19.AT,20.AT,21.AT,Exc}%
-\NewList{MiniCartesJeuMelange}
-
-\NewDocumentCommand\MiniCartesJeuAleatoire{ O{} m }{%1=options,2=nbcartes
- \useKVdefault[MiniMainAleaCartes]%
- \setKV[MiniMainAleaCartes]{#1}%
- %melange du jeu
- \ClearList{MiniCartesJeuMelange}%
- \IfStrEq{\MiniMainAleaType}{Poker}%si c'est le poker
- {%
- \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuPoker}}%
- \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}%
- }%
- {}%
- \IfStrEq{\MiniMainAleaType}{Bataille}%si c'est la bataille
- {%
- \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuBataille}}%
- \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}%
- }%
- {}%
- \IfStrEq{\MiniMainAleaType}{Belote}%si c'est le poker
- {%
- \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuBelote}}%
- \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}%
- }%
- {}%
- \IfStrEq{\MiniMainAleaType}{Tarot}%si c'est le tarot
- {%
- \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuTarot}}%
- \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}%
- }%
- {}%
- %création de la main
- \foreach \i in {1,2,...,#2}{%
- \GetItem{MiniCartesJeuMelange}{\inteval{\i-1}}{MiniCarteMainChoisie}%
- \MiniCarteJeu[FondAtout=\MiniMainAleaFondAtout,Largeur=\MiniMainAleaLargeur]{\MiniCarteMainChoisie}%
- }%finpour
-}
-
+% Author : C. Pierquet
+% licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txtf
+% Poker cards Image's Licence : LGPL-2.1 license https://github.com/htdebeer/SVG-cards
+% Tarot cards Image's Licence : Public Domain https://freesvg.org/deck-of-french-tarot-playing-cards
+% Uno cards Image's Licence : CC1.0 https://alexder.itch.io/uno-card-game-asset-pack
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{JeuxCartes}[2022/10/28 v0.1.3 Jeux de cartes]
+% 0.1.3 Ajout de cartes Uno (CC1.0 par AlexDer) + modification des commandes + rami
+% Amélioration de la qualité des cartes de Tarot (sans augmenter la taille)
+% 0.1.2 Modification du nom (et de la source) des images de Tarot (CC0)
+% 0.1.1 Ajout de commandes pour des mini-cartes
+% 0.1 Version initiale
+
+%------Packages utiles
+\RequirePackage{graphicx}
+\RequirePackage[table,svgnames]{xcolor}
+\RequirePackage{tikz}
+\RequirePackage{pgffor}
+\RequirePackage{xfp}
+\RequirePackage{listofitems}
+\RequirePackage{xstring}
+\RequirePackage{xparse}
+\RequirePackage{simplekv}
+\RequirePackage{xinttools}
+\RequirePackage{randomlist}
+\RequirePackage{pifont}
+%librairies tikz
+\usetikzlibrary{calc,scopes}
+%images venant de https://github.com/htdebeer/SVG-cards
+%images venant de https://freesvg.org/deck-of-french-tarot-playing-cards
+%images venant de https://alexder.itch.io/uno-card-game-asset-pack
+
+%------Commande en ligne (includegraphics) via raisebox/rotatebox ou tikz
+\defKV[AffCarteJeu]{%
+ Hauteur=\def\AffCarteJeuHauteur{#1},%
+ DecalageX=\def\AffCarteJeuDecalageX{#1},%
+ DecalageY=\def\AffCarteJeuDecalageY{#1},%
+ Rotation=\def\AffCarteJeuRotation{#1},%
+ AlignementV=\def\AffCarteJeuAlignementV{#1},%
+ TypeJeu=\def\AffCarteJeuType{#1}
+}
+\setKVdefault[AffCarteJeu]{%
+ Hauteur=4.25,%
+ Tikz=false,%pour placer la commande dans un environnement tikz ou en raisebox,
+ TikzAutonome=true,%pour déjà mettre l'image dans du tikz
+ DecalageX=0,%
+ DecalageY=0,%
+ Rotation=0,%
+ AlignementV=0.5,%
+ TypeJeu=Poker
+}
+
+\NewDocumentCommand\AffCarteJeu{ O{} m }{%1=options,2=cartenommée
+ \useKVdefault[AffCarteJeu]%
+ \setKV[AffCarteJeu]{#1}%
+ %cas poker
+ \IfStrEq{\AffCarteJeuType}{Poker}%poker
+ {\def\CartePrefixe{CaJ-Poker-}}{}%
+ %cas tarot
+ \IfStrEq{\AffCarteJeuType}{Tarot}%tarot
+ {\def\CartePrefixe{CaJ-Tarot-}}{}%
+ %cas tarot
+ \IfStrEq{\AffCarteJeuType}{Uno}%tarot
+ {\def\CartePrefixe{CaJ-Uno-}}{}%
+ %transformation valign en tikz
+ \def\OptionTikzCBB{current bounding box.center}%
+ \IfStrEq{\AffCarteJeuAlignementV}{0}%
+ {\def\OptionTikzCBB{current bounding box.south}}{}%
+ \IfStrEq{\AffCarteJeuAlignementV}{1}%
+ {\def\OptionTikzCBB{current bounding box.north}}{}%
+ %affichage
+ \ifboolKV[AffCarteJeu]{Tikz}%
+ {%
+ \ifboolKV[AffCarteJeu]{TikzAutonome}%
+ {%
+ {\tikz[baseline=(\OptionTikzCBB)] \draw (\AffCarteJeuDecalageX,\AffCarteJeuDecalageY) node[above right=0pt,inner sep=0pt,outer sep=0pt,rotate=\AffCarteJeuRotation] {\includegraphics[height=\AffCarteJeuHauteur cm]{\CartePrefixe#2}} ;}%
+ }%
+ {%
+ \begin{scope}[shift={(\AffCarteJeuDecalageX,\AffCarteJeuDecalageY)}]%
+ \draw (0,0) node[above right=0pt,inner sep=0pt,outer sep=0pt,rotate=\AffCarteJeuRotation] {\includegraphics[height=\AffCarteJeuHauteur cm]{\CartePrefixe#2}} ;%
+ \end{scope}%
+ }%
+ }%
+ {%
+ \rotatebox[origin=c]{\AffCarteJeuRotation}{\raisebox{-\AffCarteJeuAlignementV\height}{\includegraphics[height=\AffCarteJeuHauteur cm]{\CartePrefixe#2}}}%
+ }%
+}
+
+%------commande main simple (cartes côte à côte)
+\defKV[AffMainSimpleCartes]{%
+ Hauteur=\def\MainSimpleHauteur{#1},%
+ TypeJeu=\def\MainSimpleJeuType{#1}
+}
+\setKVdefault[AffMainSimpleCartes]{%
+ Hauteur=4.25,%
+ TypeJeu=Poker
+}
+
+\NewDocumentCommand\AffCartesJeu{ O{} m }{%1=options,2=listecartes
+ \useKVdefault[AffMainSimpleCartes]%
+ \setKV[AffMainSimpleCartes]{#1}%
+ %calculs et traitement des variables
+ \setsepchar{§}%
+ \readlist*\ListeCartesMain{#2}%
+ \def\NbCartesMain{\ListeCartesMainlen}%nbcartes
+ %main côte à côte
+ \foreach \i in {1,2,...,\ListeCartesMainlen}{%
+ \itemtomacro\ListeCartesMain[\i]\CarteMain%
+ \AffCarteJeu[TypeJeu=\MainSimpleJeuType,Hauteur=\MainSimpleHauteur]{\CarteMain}%
+ }%
+}
+
+%------commande main cartes
+\defKV[AffMainCartes]{%
+ Hauteur=\def\MainHauteur{#1},%
+ EspH=\def\MainDecalH{#1},%
+ EspV=\def\MainDecalV{#1},%
+ Rotation=\def\MainRotation{#1},%
+ TypeJeu=\def\MainJeuType{#1},%
+ AlignementV=\def\MainAlignementV{#1}
+}
+\setKVdefault[AffMainCartes]{%
+ Hauteur=4.25,%
+ EspH=1,%
+ EspV=0,%
+ Rotation=10,%
+ Eventail=false,%
+ TypeJeu=Poker,%
+ AlignementV=0.5
+}
+
+\NewDocumentCommand\MainCartesJeu{ O{} m }{%1=options,2=listecartes
+ \useKVdefault[AffMainCartes]%
+ \setKV[AffMainCartes]{#1}%
+ %calculs et traitement des variables
+ \ignoreemptyitems%
+ \setsepchar{§}%
+ \readlist*\ListeCartesMain{#2}%
+ \def\NbCartesMain{\ListeCartesMainlen}%nbcartes
+ \IfStrEq{\MainJeuType}{Poker}%poker
+ {\def\HauteurGenerique{8.5}\def\CarteMainPrefixe{CaJ-Poker-}}{}%
+ \IfStrEq{\MainJeuType}{Tarot}%tarot
+ {\def\HauteurGenerique{5.5}\def\CarteMainPrefixe{CaJ-Tarot-}}{}%
+ \IfStrEq{\MainJeuType}{Uno}%uno
+ {\def\HauteurGenerique{8.5}\def\CarteMainPrefixe{CaJ-Uno-}}{}%
+ %echelle globale
+ \def\EchelleCarteDecalage{\fpeval{\MainHauteur/\HauteurGenerique}}%
+ %transformation valign en tikz
+ \def\OptionTikzCBB{current bounding box.center}%
+ \IfStrEq{\MainAlignementV}{0}%
+ {\def\OptionTikzCBB{current bounding box.south}}{}%
+ \IfStrEq{\MainAlignementV}{1}%
+ {\def\OptionTikzCBB{current bounding box.north}}{}%
+ %environnement tikzpicture
+ \begin{tikzpicture}[baseline=(\OptionTikzCBB)]%
+ \foreach \i in {1,2,...,\ListeCartesMainlen}{%
+ \itemtomacro\ListeCartesMain[\i]\CarteMain%
+ \ifboolKV[AffMainCartes]{Eventail}%
+ {%
+ \def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainDecalV*(\i-1)}}%
+ \def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainDecalH*(\i-1)}}%
+ \def\DecAngleMain{\fpeval{0.5*\NbCartesMain*\MainRotation}}%
+ \AffCarteJeu[TypeJeu=\MainJeuType,Tikz,TikzAutonome=false,Hauteur=\MainHauteur,DecalageY=\MainOffset,DecalageX=\SecondOffset,Rotation={\DecAngleMain-(\i-1)*\MainRotation}]{\CarteMain}%
+ }%
+ {%
+ \def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainDecalH*(\i-1)}}%
+ \def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainDecalV*(\i-1)}}%
+ \AffCarteJeu[TypeJeu=\MainJeuType,Tikz,TikzAutonome=false,Hauteur=\MainHauteur,DecalageX=\MainOffset,DecalageY=\SecondOffset]{\CarteMain}%
+ }%
+ }%finpour
+ \end{tikzpicture}%
+}
+
+%------commande main aléatoire
+\defKV[AffMainAleaCartes]{%
+ Hauteur=\def\MainHauteur{#1},%
+ EspH=\def\MainDecalH{#1},%
+ EspV=\def\MainDecalV{#1},%
+ Rotation=\def\MainRotation{#1},%
+ TypeJeu=\def\MainJeuType{#1},%
+ AlignementV=\def\MainAlignementV{#1}
+}
+\setKVdefault[AffMainAleaCartes]{%
+ Hauteur=4.25,%
+ EspH=1,%
+ EspV=0,%
+ Rotation=10,%
+ Eventail=false,%
+ TypeJeu=Poker,%
+ AlignementV=0.5
+}
+
+\xdef\CartesJeuPoker{2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,DK,RK,AK}%
+\xdef\CartesJeuBelote{7P,8P,9P,10P,VP,DP,RP,AP,7T,8T,9T,10T,VT,DT,RT,AT,7C,8C,9C,10C,VC,DC,RC,AC,7K,8K,9K,10K,VK,DK,RK,AK}%
+\xdef\CartesJeuBataille{2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,DK,RK,AK,JN,JR}%
+\xdef\CartesJeuRami{2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,DK,RK,AK,JN,JR,2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,DK,RK,AK,JN,JR}%
+\xdef\CartesJeuTarot{2P,3P,4P,5P,6P,7P,8P,9P,10P,VP,CP,DP,RP,AP,2T,3T,4T,5T,6T,7T,8T,9T,10T,VT,CT,DT,RT,AT,2C,3C,4C,5C,6C,7C,8C,9C,10C,VC,CC,DC,RC,AC,2K,3K,4K,5K,6K,7K,8K,9K,10K,VK,CK,DK,RK,AK,1AT,2AT,3AT,4AT,5AT,6AT,7AT,8AT,9AT,10AT,11AT,12AT,13AT,14AT,15AT,16AT,17AT,18AT,19AT,20AT,21AT,Exc}%
+\xdef\CartesJeuUno{0B,1B,1B,2B,2B,3B,3B,4B,4B,5B,5B,6B,6B,7B,7B,8B,8B,9B,9B,PTB,PTB,CSB,CSB,P2B,P2B,0V,1V,1V,2V,2V,3V,3V,4V,4V,5V,5V,6V,6V,7V,7V,8V,8V,9V,9V,PTV,PTV,CSV,CSV,P2V,P2V,0J,1J,1J,2J,2J,3J,3J,4J,4J,5J,5J,6J,6J,7J,7J,8J,8J,9J,9J,PTJ,PTJ,CSJ,CSJ,P2J,P2J,0R,1R,1R,2R,2R,3R,3R,4R,4R,5R,5R,6R,6R,7R,7R,8R,8R,9R,9R,PTR,PTR,CSR,CSR,P2R,P2R,P4,P4,P4,P4,Coul,Coul,Coul,Coul}%
+\NewList{CartesJeuMelange}
+
+\NewDocumentCommand\MainCartesJeuAleatoire{ O{} m }{%1=options,2=nbcartes
+ \useKVdefault[AffMainAleaCartes]%
+ \setKV[AffMainAleaCartes]{#1}%
+ %calculs et traitement des variables
+ \IfStrEq{\MainJeuType}{Poker}%poker
+ {\def\HauteurGenerique{8.5}\def\CarteMainType{Poker}\xdef\CarteDebutRand{\fpeval{randint(0,52-#2)}}}{}%
+ \IfStrEq{\MainJeuType}{Uno}%uno
+ {\def\HauteurGenerique{8.5}\def\CarteMainType{Uno}\xdef\CarteDebutRand{\fpeval{randint(0,108-#2)}}}{}%
+ \IfStrEq{\MainJeuType}{Bataille}%bataille
+ {\def\HauteurGenerique{8.5}\def\CarteMainType{Poker}\xdef\CarteDebutRand{\fpeval{randint(0,54-#2)}}}{}%
+ \IfStrEq{\MainJeuType}{Belote}%poker
+ {\def\HauteurGenerique{8.5}\def\CarteMainType{Poker}\xdef\CarteDebutRand{\fpeval{randint(0,32-#2)}}}{}%
+ \IfStrEq{\MainJeuType}{Rami}%rami
+ {\def\HauteurGenerique{8.5}\def\CarteMainType{Poker}\xdef\CarteDebutRand{\fpeval{randint(0,108-#2)}}}{}%
+ \IfStrEq{\MainJeuType}{Tarot}%tarot
+ {\def\HauteurGenerique{6.375}\def\CarteMainType{Tarot}\xdef\CarteDebutRand{\fpeval{randint(0,78-#2)}}}{}%
+ %échelle relative des cartes
+ \def\EchelleCarteDecalage{\fpeval{\MainHauteur/\HauteurGenerique}}%
+ %transformation valign en tikz
+ \def\OptionTikzCBB{current bounding box.center}%
+ \IfStrEq{\MainAlignementV}{0}%
+ {\def\OptionTikzCBB{current bounding box.south}}{}%
+ \IfStrEq{\MainAlignementV}{1}%
+ {\def\OptionTikzCBB{current bounding box.north}}{}%
+ %melange du jeu
+ \ClearList{CartesJeuMelange}%
+ \IfStrEq{\MainJeuType}{Poker}%si c'est le poker
+ {%
+ \xintFor* ##1 in {\xintCSVtoList{\CartesJeuPoker}}%
+ \do{\InsertRandomItem{CartesJeuMelange}{##1}}%
+ }%
+ {}%
+ \IfStrEq{\MainJeuType}{Bataille}%si c'est la bataille
+ {%
+ \xintFor* ##1 in {\xintCSVtoList{\CartesJeuBataille}}%
+ \do{\InsertRandomItem{CartesJeuMelange}{##1}}%
+ }%
+ {}%
+ \IfStrEq{\MainJeuType}{Rami}%si c'est le rami
+ {%
+ \xintFor* ##1 in {\xintCSVtoList{\CartesJeuRami}}%
+ \do{\InsertRandomItem{CartesJeuMelange}{##1}}%
+ }%
+ {}%
+ \IfStrEq{\MainJeuType}{Uno}%si c'est le uno
+ {%
+ \xintFor* ##1 in {\xintCSVtoList{\CartesJeuUno}}%
+ \do{\InsertRandomItem{CartesJeuMelange}{##1}}%
+ }%
+ {}%
+ \IfStrEq{\MainJeuType}{Belote}%si c'est le poker
+ {%
+ \xintFor* ##1 in {\xintCSVtoList{\CartesJeuBelote}}%
+ \do{\InsertRandomItem{CartesJeuMelange}{##1}}%
+ }%
+ {}%
+ \IfStrEq{\MainJeuType}{Tarot}%si c'est le tarot
+ {%
+ \xintFor* ##1 in {\xintCSVtoList{\CartesJeuTarot}}%
+ \do{\InsertRandomItem{CartesJeuMelange}{##1}}%
+ }%
+ {}%
+ %environnement tikzpicture
+ \begin{tikzpicture}[baseline=(\OptionTikzCBB)]%
+ \foreach \i in {1,2,...,#2}{%
+ \GetItem{CartesJeuMelange}{\inteval{\CarteDebutRand+\i-1}}{CarteMainChoisie}%
+ %\itemtomacro\ListeCartesMain[\i]\CarteMain%
+ \ifboolKV[AffMainAleaCartes]{Eventail}%
+ {%
+ \def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainDecalV*(\i-1)}}%
+ \def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainDecalH*(\i-1)}}%
+ \def\DecAngleMain{\fpeval{0.5*#2*\MainRotation}}%
+ \AffCarteJeu[TypeJeu=\CarteMainType,Tikz,TikzAutonome=false,Hauteur=\MainHauteur,DecalageY=\MainOffset,DecalageX=\SecondOffset,Rotation={\DecAngleMain-(\i-1)*\MainRotation}]{\CarteMainChoisie}%
+ }%
+ {%
+ \def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainDecalH*(\i-1)}}%
+ \def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainDecalV*(\i-1)}}%
+ \AffCarteJeu[TypeJeu=\CarteMainType,Tikz,TikzAutonome=false,Hauteur=\MainHauteur,DecalageX=\MainOffset,DecalageY=\SecondOffset]{\CarteMainChoisie}%
+ }%
+ }%finpour
+ \end{tikzpicture}%
+}
+
+%------commande mini-cartes
+\defKV[AffMiniCartes]{%
+ Largeur=\def\MiniCarteLargeur{#1},
+ FondAtout=\def\MiniCarteFondAtout{#1}
+}
+\setKVdefault[AffMiniCartes]{%
+ Largeur=0.55cm,%
+ FondAtout=PeachPuff
+}
+
+\NewDocumentCommand\AffMiniCarteJeu{ O{} m }{%1=options,2=nbcartes
+ \useKVdefault[AffMiniCartes]%
+ \setKV[AffMiniCartes]{#1}%
+ %découpage de l'argument
+ \StrCut{#2}{.}\csVal\csCplt%
+ %couleur de fond
+ \def\csFond{White}%
+ \def\csCoul{black}%
+ %le cas du 10.11...21
+ \IfStrEq{\csVal}{10}{\def\csVal{\scalebox{0.5}[1]{10}}}{}%
+ \IfStrEq{\csVal}{11}{\def\csVal{\scalebox{0.5}[1]{11}}}{}%
+ \IfStrEq{\csVal}{12}{\def\csVal{\scalebox{0.5}[1]{12}}}{}%
+ \IfStrEq{\csVal}{13}{\def\csVal{\scalebox{0.5}[1]{13}}}{}%
+ \IfStrEq{\csVal}{14}{\def\csVal{\scalebox{0.5}[1]{14}}}{}%
+ \IfStrEq{\csVal}{15}{\def\csVal{\scalebox{0.5}[1]{15}}}{}%
+ \IfStrEq{\csVal}{16}{\def\csVal{\scalebox{0.5}[1]{16}}}{}%
+ \IfStrEq{\csVal}{17}{\def\csVal{\scalebox{0.5}[1]{17}}}{}%
+ \IfStrEq{\csVal}{18}{\def\csVal{\scalebox{0.5}[1]{18}}}{}%
+ \IfStrEq{\csVal}{19}{\def\csVal{\scalebox{0.5}[1]{19}}}{}%
+ \IfStrEq{\csVal}{20}{\def\csVal{\scalebox{0.5}[1]{20}}}{}%
+ \IfStrEq{\csVal}{21}{\def\csVal{\scalebox{0.5}[1]{21}}}{}%
+ %le cas du Excuse
+ \IfStrEq{#2}{Exc}%
+ {\def\csSymb{\ding{168}}\def\csCoul{blue}%
+ \def\csVal{\scalebox{0.33}[1]{EXC}}}{}%
+ %le cas du Joker
+ \IfStrEq{\csVal}{J}%
+ {\def\csSymb{\ding{166}}\def\csVal{\scalebox{0.5}[1]{JO}}}{}%
+ %si c'est un coeur
+ \IfStrEq{\csCplt}{C}%
+ {\def\csSymb{\ding{170}}\def\csCoul{red}}{}%
+ %si c'est un carreau
+ \IfStrEq{\csCplt}{K}%
+ {\def\csSymb{\ding{169}}\def\csCoul{red}}{}%
+ %si c'est un coeur
+ \IfStrEq{\csCplt}{P}%
+ {\def\csSymb{\ding{171}}}{}%
+ %si c'est un trèfle
+ \IfStrEq{\csCplt}{T}%
+ {\def\csSymb{\ding{168}}}{}%
+ %si c'est un atout 68
+ \IfStrEq{\csCplt}{AT}%
+ {\def\csFond{\MiniCarteFondAtout}\def\csSymb{\ding{88}}}{}%
+ %si c'est un rouge
+ \IfStrEq{\csCplt}{R}%
+ {\def\csCoul{red}}{}%
+ %minicarte
+ \tikz[baseline=(char.base)]\node[anchor=north west,line width=0.7pt,draw=Gray,rectangle,rounded corners,inner sep=1.6pt,fill=\csFond,text=\csCoul,font=\ttfamily,minimum width=\MiniCarteLargeur](char){\csVal\scalebox{0.75}[0.75]{\csSymb}};%
+}
+
+%------commande mini-main-cartes
+\defKV[AffMiniMainCartes]{%
+ Largeur=\def\MiniMainLargeur{#1},%
+ FondAtout=\def\MiniMainFondAtout{#1}
+}
+\setKVdefault[AffMiniMainCartes]{%
+ Largeur=0.55cm,%
+ FondAtout=PeachPuff
+}
+
+\NewDocumentCommand\MainMiniCartesJeu{ O{} m }{%1=options,2=liste
+ \useKVdefault[AffMiniMainCartes]%
+ \setKV[AffMiniMainCartes]{#1}%
+ \ignoreemptyitems%
+ \setsepchar{§}%
+ \readlist*\MiniCartesMain{#2}%
+ \foreachitem\MiniCarteAffich\in\MiniCartesMain{%
+ \AffMiniCarteJeu[FondAtout=\MiniMainFondAtout,Largeur=\MiniMainLargeur]{\MiniCarteAffich}%
+ }%
+}
+
+%------commande mini-main aléatoire
+\defKV[MiniMainAleaCartes]{%
+ Largeur=\def\MiniMainAleaLargeur{#1},%
+ TypeJeu=\def\MiniMainAleaType{#1},%
+ FondAtout=\def\MiniMainAleaFondAtout{#1}
+}
+\setKVdefault[MiniMainAleaCartes]{%
+ Largeur=0.55cm,%
+ TypeJeu=Poker,%
+ FondAtout=PeachPuff
+}
+
+\xdef\MiniCartesJeuPoker{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K}%
+\xdef\MiniCartesJeuBelote{7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K}%
+\xdef\MiniCartesJeuBataille{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K,J.N,J.R}%
+\xdef\MiniCartesJeuTarot{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,C.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,C.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,C.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,C.K,D.K,R.K,A.K,1.AT,2.AT,3.AT,4.AT,5.AT,6.AT,7.AT,8.AT,9.AT,10.AT,11.AT,12.AT,13.AT,14.AT,15.AT,16.AT,17.AT,18.AT,19.AT,20.AT,21.AT,Exc}%
+\xdef\MiniCartesJeuRami{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K,J.N,J.R,2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,V.P,D.P,R.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,V.T,D.T,R.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,V.C,D.C,R.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,V.K,D.K,R.K,A.K,J.N,J.R}%
+\NewList{MiniCartesJeuMelange}
+
+\NewDocumentCommand\MainMiniCartesJeuAleatoire{ O{} m }{%1=options,2=nbcartes
+ \useKVdefault[MiniMainAleaCartes]%
+ \setKV[MiniMainAleaCartes]{#1}%
+ %melange du jeu
+ \ClearList{MiniCartesJeuMelange}%
+ \IfStrEq{\MiniMainAleaType}{Poker}%si c'est le poker
+ {%
+ \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuPoker}}%
+ \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}%
+ }%
+ {}%
+ \IfStrEq{\MiniMainAleaType}{Bataille}%si c'est la bataille
+ {%
+ \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuBataille}}%
+ \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}%
+ }%
+ {}%
+ \IfStrEq{\MiniMainAleaType}{Belote}%si c'est le belote
+ {%
+ \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuBelote}}%
+ \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}%
+ }%
+ {}%
+ \IfStrEq{\MiniMainAleaType}{Tarot}%si c'est le tarot
+ {%
+ \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuTarot}}%
+ \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}%
+ }%
+ {}%
+ \IfStrEq{\MiniMainAleaType}{Rami}%si c'est le rami
+ {%
+ \xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuRami}}%
+ \do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}%
+ }%
+ {}%
+ %création de la main
+ \foreach \i in {1,2,...,#2}{%
+ \GetItem{MiniCartesJeuMelange}{\inteval{\i-1}}{MiniCarteMainChoisie}%
+ \AffMiniCarteJeu[FondAtout=\MiniMainAleaFondAtout,Largeur=\MiniMainAleaLargeur]{\MiniCarteMainChoisie}%
+ }%finpour
+}
+
\endinput \ No newline at end of file