diff options
author | Norbert Preining <norbert@preining.info> | 2022-11-01 03:01:47 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-11-01 03:01:47 +0000 |
commit | 7ad25021e74ea26e33d705fbb402d29aabaf6314 (patch) | |
tree | 56c2d0c14fba2ebe57cb45ad1a2eff04f901378d /macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty | |
parent | c7892fe1a11367872de6f3ee0fa074b39824e59c (diff) |
CTAN sync 202211010301
Diffstat (limited to 'macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty')
-rw-r--r-- | macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty | 855 |
1 files changed, 428 insertions, 427 deletions
diff --git a/macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty b/macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty index 26c2741e4b..39a3595ce5 100644 --- a/macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty +++ b/macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty @@ -1,428 +1,429 @@ -% 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
-}
-
+% 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/30 v0.1.4 Jeux de cartes] +% 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[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 |