diff options
Diffstat (limited to 'macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty')
-rw-r--r-- | macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty | 794 |
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 |