% Author.........................: C. Pierquet
% licence........................: Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf
% Poker v1 cards Image's Licence.: LGPL-2.1 license https://github.com/htdebeer/SVG-cards
% Poker v2 cards Image's Licence.: Public Domain https://tekeye.uk/playing_cards/svg-playing-cards
% Poker v3 cards Image's Licence.: Public Domain https://www.me.uk/cards/
% Poker v4 cards Image's Licence.: CC BY-SA 4.0 https://commons.wikimedia.org/wiki/File:Computer_screen_playing_cards_deck.svg
% Poker v5 cards Image's Licence.: Public Domain https://www.me.uk/cards/
% Poker fr cards Image's Licence.: LGPL-2.1 license https://svg-cards.sourceforge.net/
% Poker bi cards Image's Licence.: LGPL-3 license https://github.com/tfbkny/blackjack
% Tarot v1 cards Image's Licence.: Public Domain https://freesvg.org/deck-of-french-tarot-playing-cards
% Uno   v1 cards Image's Licence.: MIT License https://eperezcosano.github.io/uno-part1/

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{JeuxCartes}[2023/08/08 v0.2.7 Jeux de cartes]
% 0.2.7 Retour en arrière design v2 tarot (pb de licence)
% 0.2.5	Correction d'un dysfonctionnement avec le J qui peut désormais être utilisé en MiniCarte avec le Joker [en] + MiniMains [en]
% 0.2.4	Style <fr> avec cartes françaises + <bicycl> + modification des clés avec l'ajout de <StyleJeu> + Suppression xcolor
% 0.2.3	Ajout d'une option pour présenter une main "inversée" + style <v5>
% 0.2.2	Correction de 2 cartes de pokerv4
% 0.2.2	Ajout d'un style <v4> pour le poker
% 0.2.1	Correction d'un bug avec une carte de poker...
% 0.2.0	Modification des images (en mode pdf !) + <v3> Poker + réduction taille Tarot
% 0.1.7	Correction d'un bug avec les noms de Uno
% 0.1.5	Ajout <v2> pour le Poker
% 0.1.4	Réduction de la taille des images
% 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{tikz}
\RequirePackage{pgffor}
\RequirePackage{listofitems}
\RequirePackage{xstring}
\RequirePackage{simplekv}
\RequirePackage{xinttools}
\RequirePackage{randomlist}
\RequirePackage{pifont}
%librairies tikz
\usetikzlibrary{calc,scopes}

%------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},%
	StyleJeu=\def\AffCarteJeuStyle{#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,%
	StyleJeu=v1
}

\NewDocumentCommand\AffCarteJeu{ O{} m }{%1=options,2=cartenommée (OK)
	\useKVdefault[AffCarteJeu]%
	\setKV[AffCarteJeu]{#1}%
	%cas poker
	\IfStrEq{\AffCarteJeuType}{Poker}%poker et ensuite style
		{%
			%cas pokerv1
			\IfStrEq{\AffCarteJeuStyle}{v1}%pokerv1
				{\def\CartePrefixe{CaJ-PokeRv1-}}{}%
			%cas pokerv2
			\IfStrEq{\AffCarteJeuStyle}{v2}%pokerv2
				{\def\CartePrefixe{CaJ-PokeRv2-}}{}%
			%cas pokerv3
			\IfStrEq{\AffCarteJeuStyle}{v3}%pokerv3
				{\def\CartePrefixe{CaJ-PokeRv3-}}{}%
			%cas pokerv4
			\IfStrEq{\AffCarteJeuStyle}{v4}%pokerv4
				{\def\CartePrefixe{CaJ-PokeRv4-}}{}%
			%cas pokerv5
			\IfStrEq{\AffCarteJeuStyle}{v5}%pokerv5
				{\def\CartePrefixe{CaJ-PokeRv5-}}{}%
			%cas pokerfr
			\IfStrEq{\AffCarteJeuStyle}{fr}%pokerfr
				{\def\CartePrefixe{CaJ-PokeRfr-}}{}%
			%cas pokerbicycle
			\IfStrEq{\AffCarteJeuStyle}{bicycl}%pokerbic
				{\def\CartePrefixe{CaJ-PokeRbic-}}{}%
		}%
		{}%
	%cas tarot
	\IfStrEq{\AffCarteJeuType}{Tarot}%tarot (un seul style)
		{\def\CartePrefixe{CaJ-TaroTv1-}}{}%
	%cas uno
	\IfStrEq{\AffCarteJeuType}{Uno}%uno (un seul style)
		{\def\CartePrefixe{CaJ-UnOv1-}}{}%
	%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},%
	StyleJeu=\def\MainSimpleJeuStyle{#1}
}
\setKVdefault[AffMainSimpleCartes]{%
	Hauteur=4.25,%
	TypeJeu=Poker,%
	StyleJeu=v1
}

\NewDocumentCommand\AffCartesJeu{ O{} m }{%1=options,2=listecartes (OK)
	\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,StyleJeu=\MainSimpleJeuStyle,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},%
	StyleJeu=\def\MainJeuStyle{#1},%
	AlignementV=\def\MainAlignementV{#1}
}

\setKVdefault[AffMainCartes]{%
	Hauteur=4.25,%
	EspH=1,%
	EspV=0,%
	Rotation=10,%
	Eventail=false,%
	TypeJeu=Poker,%
	StyleJeu=v1,%
	AlignementV=0.5,%
	Inverse=false
}

\NewDocumentCommand\MainCartesJeu{ O{} m }{%1=options,2=listecartes (OK)
	\useKVdefault[AffMainCartes]%
	\setKV[AffMainCartes]{#1}%
	%calculs et traitement des variables
	\ignoreemptyitems%
	\setsepchar{§}%
	\readlist*\ListeCartesMain{#2}%
	\def\NbCartesMain{\ListeCartesMainlen}%nbcartes
	%le cas du poker
	\IfStrEq{\MainJeuType}{Poker}%poker
		{%
			\def\HauteurGenerique{8.5}%
			\IfStrEq{\MainJeuStyle}{v1}%pokerv1
				{\def\CarteMainPrefixe{CaJ-PokeRv1-}}{}%
			\IfStrEq{\MainJeuStyle}{v2}%poker2
				{\def\CarteMainPrefixe{CaJ-PokeRv2-}}{}%
			\IfStrEq{\MainJeuStyle}{v3}%poker3
				{\def\CarteMainPrefixe{CaJ-PokeRv3-}}{}%
			\IfStrEq{\MainJeuStyle}{v4}%poker4
				{\def\CarteMainPrefixe{CaJ-PokeRv4-}}{}%
			\IfStrEq{\MainJeuStyle}{v5}%poker5
				{\def\CarteMainPrefixe{CaJ-PokeRv5-}}{}%
			\IfStrEq{\MainJeuStyle}{fr}%pokerfr
				{\def\CarteMainPrefixe{CaJ-PokeRfr-}}{}%
			\IfStrEq{\MainJeuStyle}{bicycl}%pokerbic
				{\def\CarteMainPrefixe{CaJ-PokeRbic-}}{}%
		}%
		{}%
	\IfStrEq{\MainJeuType}{Tarot}%tarot
		{\def\HauteurGenerique{5.5}\def\CarteMainPrefixe{CaJ-TaroTv1-}}{}%
	\IfStrEq{\MainJeuType}{Uno}%uno
		{\def\HauteurGenerique{8.5}\def\CarteMainPrefixe{CaJ-UnOv1-}}{}%
	%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)]%
		\ifboolKV[AffMainCartes]{Inverse}%
			{%
				\foreach \i in {\ListeCartesMainlen,\inteval{\ListeCartesMainlen-1},...,1}
			}%
			{%
				\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,StyleJeu=\MainJeuStyle,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,StyleJeu=\MainJeuStyle,Tikz,TikzAutonome=false,Hauteur=\MainHauteur,DecalageX=\MainOffset,DecalageY=\SecondOffset]{\CarteMain}%
			}%
		}%finpour
	\end{tikzpicture}%
}

%------commande main aléatoire
\defKV[AffMainAleaCartes]{%
	Hauteur=\def\MainAleaHauteur{#1},%
	EspH=\def\MainAleaDecalH{#1},%
	EspV=\def\MainAleaDecalV{#1},%
	Rotation=\def\MainAleaRotation{#1},%
	TypeJeu=\def\MainAleaJeuType{#1},%
	StyleJeu=\def\MainAleaJeuStyle{#1},%
	AlignementV=\def\MainAleaAlignementV{#1}
}
\setKVdefault[AffMainAleaCartes]{%
	Hauteur=4.25,%
	EspH=1,%
	EspV=0,%
	Rotation=10,%
	Eventail=false,%
	TypeJeu=Poker,%
	StyleJeu=v1,%
	AlignementV=0.5,%
	Inverse=false
}

\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 (OK)
	\useKVdefault[AffMainAleaCartes]%
	\setKV[AffMainAleaCartes]{#1}%
	%calculs et traitement des variables
	\IfStrEq{\MainAleaJeuType}{Poker}%poker
		{%
			\def\HauteurGenerique{8.5}%hauteur générique
			\def\CarteMainType{Poker}%on stocke le typejeu poker
			\xdef\CarteDebutRand{\fpeval{randint(0,52-#2)}}%
		}%
		{}%
	\IfStrEq{\MainAleaJeuType}{Bataille}%bataille
		{%
			\def\HauteurGenerique{8.5}%hauteur générique
			\def\CarteMainType{Poker}%on stocke le typejeu Bataille
			\xdef\CarteDebutRand{\fpeval{randint(0,54-#2)}}%
		}%
		{}%
	\IfStrEq{\MainAleaJeuType}{Belote}%belote
		{%
			\def\HauteurGenerique{8.5}%hauteur générique
			\def\CarteMainType{Poker}%on stocke le typejeu poker
			\xdef\CarteDebutRand{\fpeval{randint(0,32-#2)}}%
		}%
		{}%
	\IfStrEq{\MainAleaJeuType}{Rami}%rami
		{%
			\def\HauteurGenerique{8.5}%hauteur générique
			\def\CarteMainType{Poker}%on stocke le typejeu poker
			\xdef\CarteDebutRand{\fpeval{randint(0,108-#2)}}%
		}%
		{}%
	\IfStrEq{\MainAleaJeuType}{Uno}%uno
		{\def\HauteurGenerique{8.5}\def\CarteMainType{Uno}\xdef\CarteDebutRand{\fpeval{randint(0,108-#2)}}}{}%
	\IfStrEq{\MainAleaJeuType}{Tarot}%tarot
		{\def\HauteurGenerique{6.375}\def\CarteMainType{Tarot}\xdef\CarteDebutRand{\fpeval{randint(0,78-#2)}}}{}%
	%échelle relative des cartes
	\def\EchelleCarteDecalage{\fpeval{\MainAleaHauteur/\HauteurGenerique}}%
	%transformation valign en tikz
	\def\OptionTikzCBB{current bounding box.center}%
	\IfStrEq{\MainAleaAlignementV}{0}%
		{\def\OptionTikzCBB{current bounding box.south}}{}%
	\IfStrEq{\MainAleaAlignementV}{1}%
		{\def\OptionTikzCBB{current bounding box.north}}{}%
	%melange du jeu
	\ClearList{CartesJeuMelange}%
	\IfStrEq{\MainAleaJeuType}{Poker}%si c'est le poker
		{%
			\xintFor* ##1 in {\xintCSVtoList{\CartesJeuPoker}}%
			\do{\InsertRandomItem{CartesJeuMelange}{##1}}%
		}%
		{}%
	\IfStrEq{\MainAleaJeuType}{Bataille}%si c'est la bataille
		{%
			\xintFor* ##1 in {\xintCSVtoList{\CartesJeuBataille}}%
			\do{\InsertRandomItem{CartesJeuMelange}{##1}}%
		}%
		{}%
	\IfStrEq{\MainAleaJeuType}{Rami}%si c'est le rami
		{%
			\xintFor* ##1 in {\xintCSVtoList{\CartesJeuRami}}%
			\do{\InsertRandomItem{CartesJeuMelange}{##1}}%
		}%
		{}%
	\IfStrEq{\MainAleaJeuType}{Belote}%si c'est la belote
		{%
			\xintFor* ##1 in {\xintCSVtoList{\CartesJeuBelote}}%
			\do{\InsertRandomItem{CartesJeuMelange}{##1}}%
		}%
		{}%
	\IfStrEq{\MainAleaJeuType}{Tarot}%si c'est le tarot
		{%
			\xintFor* ##1 in {\xintCSVtoList{\CartesJeuTarot}}%
			\do{\InsertRandomItem{CartesJeuMelange}{##1}}%
		}%
		{}%
		\IfStrEq{\MainAleaJeuType}{Uno}%si c'est le uno
		{%
			\xintFor* ##1 in {\xintCSVtoList{\CartesJeuUno}}%
			\do{\InsertRandomItem{CartesJeuMelange}{##1}}%
		}%
		{}%
	%environnement tikzpicture
	\begin{tikzpicture}[baseline=(\OptionTikzCBB)]%
		\ifboolKV[AffMainAleaCartes]{Inverse}%
			{%
				\foreach \i in {#2,\inteval{#2-1},...,1}
			}%
			{%
				\foreach \i in {1,2,...,#2}
			}%
		{%début du foreach
			\GetItem{CartesJeuMelange}{\inteval{\CarteDebutRand+\i-1}}{CarteMainChoisie}%
			\ifboolKV[AffMainAleaCartes]{Eventail}%
			{%
				\def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainAleaDecalV*(\i-1)}}%
				\def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainAleaDecalH*(\i-1)}}%
				\def\DecAngleMain{\fpeval{0.5*#2*\MainAleaRotation}}%
				\AffCarteJeu[TypeJeu=\CarteMainType,StyleJeu=\MainAleaJeuStyle,Tikz,TikzAutonome=false,Hauteur=\MainAleaHauteur,DecalageY=\MainOffset,DecalageX=\SecondOffset,Rotation={\DecAngleMain-(\i-1)*\MainAleaRotation}]{\CarteMainChoisie}%
			}%
			{%
				\def\MainOffset{\fpeval{\EchelleCarteDecalage*\MainAleaDecalH*(\i-1)}}%
				\def\SecondOffset{\fpeval{\EchelleCarteDecalage*\MainAleaDecalV*(\i-1)}}%
				\AffCarteJeu[TypeJeu=\CarteMainType,StyleJeu=\MainAleaJeuStyle,Tikz,TikzAutonome=false,Hauteur=\MainAleaHauteur,DecalageX=\MainOffset,DecalageY=\SecondOffset]{\CarteMainChoisie}%
			}%
		}%finforeach
	\end{tikzpicture}%
}

%------commande pour remonter le Q ttfamily
\DeclareRobustCommand*{\RaiseBoxByDepth}{%
	\raisebox{\depth}%
}
%------commande mini-cartes
\defKV[AffMiniCartes]{%
	Largeur=\def\MiniCarteLargeur{#1},%
	FondAtout=\def\MiniCarteFondAtout{#1}
}
\setKVdefault[AffMiniCartes]{%
	Largeur=0.55cm,%
	FondAtout=yellow
}

\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 de Excuse
	\IfStrEq{#2}{Exc}%
		{\def\csSymb{\ding{168}}\def\csCoul{blue}\def\csVal{\scalebox{0.33}[1]{EXC}}}{}%
	%le cas du Joker
	\IfStrEq{\csVal}{JO}%
		{\def\csSymb{\ding{166}}\def\csVal{\scalebox{0.5}[1]{JO}}}{}%
	%le cas de la dame [en] Q
	\IfStrEq{\csVal}{Q}%
		{\def\csVal{\RaiseBoxByDepth{\scalebox{1}[0.8]{Q}}}}{}%
	%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=3pt,inner sep=1.5pt,fill=\csFond,text=\csCoul,font=\ttfamily,minimum width=\MiniCarteLargeur](char){\vphantom{A}\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=yellow
}

\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=yellow
}

\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\MiniCartesJeuPokerEN{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,J.P,Q.P,K.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,J.T,Q.T,K.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,J.C,Q.C,K.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,J.K,Q.K,K.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\MiniCartesJeuBeloteEN{7.P,8.P,9.P,10.P,J.P,Q.P,K.P,A.P,7.T,8.T,9.T,10.T,J.T,Q.T,K.T,A.T,7.C,8.C,9.C,10.C,J.C,Q.C,K.C,A.C,7.K,8.K,9.K,10.K,J.K,Q.K,K.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,JO.N,JO.R}%
\xdef\MiniCartesJeuBatailleEN{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,J.P,Q.P,K.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,J.T,Q.T,K.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,J.C,Q.C,K.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,J.K,Q.K,K.K,A.K,JO.N,JO.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,JO.N,JO.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,JO.N,JO.R}%
\xdef\MiniCartesJeuRamiEN{2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,J.P,Q.P,K.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,J.T,Q.T,K.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,J.C,Q.C,K.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,J.K,Q.K,K.K,A.K,JO.N,JO.R,2.P,3.P,4.P,5.P,6.P,7.P,8.P,9.P,10.P,J.P,Q.P,K.P,A.P,2.T,3.T,4.T,5.T,6.T,7.T,8.T,9.T,10.T,J.T,Q.T,K.T,A.T,2.C,3.C,4.C,5.C,6.C,7.C,8.C,9.C,10.C,J.C,Q.C,K.C,A.C,2.K,3.K,4.K,5.K,6.K,7.K,8.K,9.K,10.K,J.K,Q.K,K.K,A.K,JO.N,JO.R}%
\NewList{MiniCartesJeuMelange}

\NewDocumentCommand\MainMiniCartesJeuAleatoire{ O{} m }{%1=options,2=nbcartes
	\useKVdefault[MiniMainAleaCartes]%
	\setKV[MiniMainAleaCartes]{#1}%
	%melange du jeu
	\ClearList{MiniCartesJeuMelange}%
	%Cartes [fr]
	\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}}%
	}%
	{}%
	%Cartes [en]
	\IfStrEq{\MiniMainAleaType}{PokerEN}%si c'est le poker
	{%
		\xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuPokerEN}}%
		\do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}%
	}%
	{}%
	\IfStrEq{\MiniMainAleaType}{BatailleEN}%si c'est la bataille
	{%
		\xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuBatailleEN}}%
		\do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}%
	}%
	{}%
	\IfStrEq{\MiniMainAleaType}{BeloteEN}%si c'est le belote
	{%
		\xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuBeloteEN}}%
		\do{\InsertRandomItem{MiniCartesJeuMelange}{##1}}%
	}%
	{}%
	\IfStrEq{\MiniMainAleaType}{RamiEN}%si c'est le rami
	{%
		\xintFor* ##1 in {\xintCSVtoList{\MiniCartesJeuRamiEN}}%
		\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