Page 2 sur 2

Re: Petit Jeu YAM's ou Yahtzee - fr, en, de, sp

Publié : jeu. 06/août/2026 13:38
par kernadec
bjr à tous
les codes précédents ont été mis à jours pour les versions 4
ceux du premier et du dernier post...
car je me suis aperçu que certaines séries de petites suites
passaient au travers avec CountString() ce qui était normal désolé! :mrgreen: :oops:
le problème est maintenant c est réglé
Cordialement

Re: Petit Jeu YAM's ou Yahtzee - fr, en, de, sp

Publié : lun. 17/août/2026 13:06
par kernadec
bjr à tous
Après plusieurs recherche sur le Yahtzee ou le Yam's
il se trouve qu il y a des modes différents dans ce jeu de Des
il y ceux qui jouent en tenant compte d'un mode avec 2 paires
les autres utilisent les petites-suite de 4 cartes
donc, Après reflexion j ai modifie les parametres...

Pour cela j ai mis ces deux options mineures à 10 points
pour les paires et 15 points pour les suites mineures de 4 dès
ne pas changer l ordre de ces valeurs de points sinon cela
pourrait provoquer un desordre dans l affichage des resultas

et ajouté ce choix en option de départ du jeu
mais celui-ci peut etre modifiés en cours de jeu
via le menu options..

Code mis à jour sur 1er post

code mis à jour sur ce dernier post en moins de 800 lignes
pour l'utiliser voir le compiler avec version demo de PureBasic.
voici un lien pour avoir les dictions de points en ogg:
ces dossiers sont a mettre dans celui du programme :mrgreen:
https://drive.google.com/file/d/1I5yLdB ... drive_link

pour ajouter de la diction au code voir avec ce lien : https://soundoftext.com
Cordialement

Code : Tout sélectionner

; Forum: http://www.purebasic.fr/german/viewtopic.php?t=3249&start=10
; Autheur de procedure DrawCube: NicTheQuick (updated for PB 4.00 by Andre) 
; (YAMS Auteur kernadec  PB 630 et supérieur par kernadec le 25 Juin 2026) 
; Version corrigée pour la selection de Dés avec la souris on/off  Aout 2026
; version 5 en moins de 800 lignes
UsePNGImageDecoder()
EnableExplicit
Enumeration 
  #Window_Des
EndEnumeration
Structure yams
  Num.l
  Tours.l
  Points.l
EndStructure
Global NewList Ranglist.yams()
Global Event, Cube_Size.l, Cube_Points_r.l, Cube_Img.l, Cube_alpha.l, main, SonActif.l, TitreW$, block
Global numero.l, Lancer.l = 1, Joueur.l, Jco, Jcolor.l, i, u, a.l, n.l, ne.l, ns.l, m$, lg, ii, uu
Global Total, Total$, Total1$, Total2$, Total3$, Score$, result1.l,ColorDes,tmp.l, foix1.l, ToPair
Global Calcul1$, Calcul2$, Calcul3$, Calcul4$, Calcul5$, Calcul6$, dicte$, version$, chemin$, Pt_Suite
Global FtArial, ni, txi, tyi, xt, yt, T$, Cf, Cb, Ht, col, bcol, xb, yb, Styl, fon$, fon1$, fon2$
Global Dim Resultat(6), Dim  Resultat2(6), Dim XPosition(6), Dim Des_Fixe(6),Dim Couleur(6)
Global Dim TourJoueur(6), Dim RangJoueur$(6), Dim Filtre(6), Dim triage$(5), Dim Paire$(6)
Global Dim ScoreJoueur(6), Dim ScoreChance(6), Dim Language$(36), Dim Language1$(36)
Procedure country(lg)
  If lg = 1  ; french()
    Language$(1) = "Joueur n°1": Language$(2) = "Joueur n°2": Language$(3) = "Joueur n°3":Language$(4) = "Joueur n°4": Language$(5) = "Joueur n°5": Language$(6) = "Joueur n°6": Language$(7) = "JOUEUR  N° "
    Language$(8) = "[ Espace ]...  Lance " + Str(5) + " Dés"
    Language$(9) = "[ Return ]  =  PASSER et VALIDER LE RESULTAT"
    Language$(10) = " [Joueur suivant]   RESULTAT = "
    Language$(11) = "[ Espace ].Résultat du 1er Coup "
    Language$(12) = "[ Espace ].Résultat du 2ème Coup"
    Language$(13) = "[ Espace ]...3ème Coup = RESULTAT"
    Language$(14) = "Cliquer sur les Dés qui doivent conserver leurs valeurs     Pour choisir un joueur > Clavier de 1 à 6"
    Language$(15) = "Color Des"
    Language$(16) = "Resultat Sonor"
    Language$(17) = "Efface tout"
    Language$(18) = "Quit"
    Language$(19) = "[ Espace ]...  Lance 5 Dés"
    Language$(20) = " Score  "
    Language$(21) = " Points "
    Language$(22) = " Tours "
    Language$(23) = " Chance "
    Language$(24) = " Tirage "
    Language$(25) = "Tours"
    Language$(26) = "rang"
    Language$(27) = "Options"
    Language$(28) = "Joueur"
    Language$(29) = " Brelan 20"
    Language$(30) = "    Full 25"
    Language$(31) = "  Carre 30"
    Language$(32) = " Pt.Suit 15"
    Language$(33) = " Gr.Suit 40"
    Language$(34) = "  YAM'S 50"
    Language$(35) = "  Z e r o + 0 "
    Language$(36) = " 2 Paires 10"
  EndIf
  If lg = 2  ;English()
    Language$(1) = " Player n°1":Language$(2) = " Player n°2":Language$(3) = " Player n°3":Language$(4) = " Player n°4":Language$(5) = " Player n°5":Language$(6) = " Player n°6": Language$(7) = "PLAYER  N° "
    Language$(8) = "( Space )...Roll the" + Str(5) + " Dice"
    Language$(9) = "[ Return ] = PROCESS and COMFIRM THE RESULT"
    Language$(10) = " [ Next player ] THE RESULT = "
    Language$(11) = "[ Space ]...Result of the 1st Round"
    Language$(12) = "[ Space ]...Result of the 2nd Round"
    Language$(13) = "[ Space ]...3rd Move = RESULT"
    Language$(14) = "Click on the dice that should keep their values     To select a player > Keyboard keys 1 to 6"
    Language$(15) = "Dice Color"
    Language$(16) = "Sound Result"
    Language$(17) = "Erase everything"
    Language$(18) = "Quit"
    Language$(19) = "[ Space ]... Roll the 5 Dice"
    Language$(20) = " Score  "
    Language$(21) = " Points "
    Language$(22) = "RoundPlay"
    Language$(23) = " Luck "
    Language$(24) = "Sort order"
    Language$(25) = "Round"
    Language$(26) = "Row"
    Language$(27) = "Options"
    Language$(28) = "Player"
    Language$(29) = " 3of kind 20"
    Language$(30) = "FullHouse 25"
    Language$(31) = " 4of kind 30"
    Language$(32) = "Sequen4 15"
    Language$(33) = "Sequen5 40"
    Language$(34) = " Yahtzee 50"
    Language$(35) = "  Z e r o + 0 "
    Language$(36) = " 2 pairs 10"
  EndIf
  If lg = 3  ;German()
    Language$(1) = "Spieler n°1": Language$(2) = "Spieler n°2": Language$(3) = "Spieler n°3":Language$(4) = "Spieler n°4":Language$(5) = "Spieler n°5":Language$(6) = "Spieler n°6": Language$(7) = "SPIELER N° "
    Language$(8) = "[Leertaste]..Starte " + Str(5) + " Würfel"
    Language$(9) = "[ Return ] = Ausführen und Ergebnis bestätigen"
    Language$(10) = " [Nächster Spieler]   ERGEBNIS ="
    Language$(11) = "[Leerzeichen]. Ergebnis 1. Wurfs"
    Language$(12) = "[Leerzeichen]. Ergebnis 2. Wurfs"
    Language$(13) = "[Leerzeichen]..3. Zug = ERGEBNIS"
    Language$(14) = "Klicken Sie auf die Würfel, um deren Wert zu behalten : einen Spieler auszuwählen >Tastatur 1bis6"
    Language$(15) = "Farbe des Würfels"
    Language$(16) = "Klangresultat"
    Language$(17) = "Löscht alles"
    Language$(18) = "Beenden"
    Language$(19) = "[Leertaste] ... " + "5" + " Würfel werfen"
    Language$(20) = " Spielstand"
    Language$(21) = " Punkte "
    Language$(22) = " Zyklus "
    Language$(23) = " Glück "
    Language$(24) = " Auflage"
    Language$(25) = "Zyklus"
    Language$(26) = "rang"
    Language$(27) = "Option"
    Language$(28) = "Spieler"
    Language$(29) = " Drilling 20"
    Language$(30) = "FullHous 25"
    Language$(31) = " Vierling 30"
    Language$(32) = "Fortset4 15"
    Language$(33) = "Fortset5 40"
    Language$(34) = " Yahtzee 50"
    Language$(35) = "  Z e r o + 0 "
    Language$(36) = " 2 Paar 10"
  EndIf
  If lg = 4  ;Spagne()
    Language$(1) = " Jugador 1": Language$(2) = " Jugador 2": Language$(3) = " Jugador 3": Language$(4) = " Jugador 4": Language$(5) = " Jugador 5": Language$(6) = " Jugador 6": Language$(7) = "JUGADOR N° "
    Language$(8) = "[ Espacio ]...  Lanza" + Str(5) + "Dados"
    Language$(9) = "[ Return ]  =  PASAR y VALIDAR EL RESULTADO"
    Language$(10) = "[Siguiente jugador]   RESULTADO ="
    Language$(11) = "[Espacio]....Resultado de la 1.ª ronda"
    Language$(12) = "[ Espacio ]...Resultado de la segunda ronda"
    Language$(13) = "[ Espacio ]...3.er golpe = RESULTADO"
    Language$(14) = "Haz clic en los dados que deban conservar valores    Para elegir un jugador > Teclado del 1 al 6"
    Language$(15) = "Dados Color"
    Language$(16) = "Su resultado"
    Language$(17) = "Borra todo"
    Language$(18) = "Salir"
    Language$(19) = "[Espacio]... Lanza 5 dados"
    Language$(20) = " Score  "
    Language$(21) = " Puntos "
    Language$(22) = " Ciclo"
    Language$(23) = "Fortuna"
    Language$(24) = "Sorteo"
    Language$(25) = "Redonda"
    Language$(26) = "Fila"
    Language$(27) = "Opciones"
    Language$(28) = "Jugador"
    Language$(29) = "3Iguales 20"
    Language$(30) = "Casalena 25"
    Language$(31) = "4Iguales 30"
    Language$(32) = "Esquale4 15"
    Language$(33) = "Esquale5 40"
    Language$(34) = "5Iguales 50"
    Language$(35) = "  Z e r o + 0 "
    Language$(36) = " 2 pares 10"
  EndIf
EndProcedure 
Couleur(1) = RGBA(0, 255, 255, 0) : Couleur(2) = #Red : Couleur(3) = #Green : Couleur(4) = #Blue : Couleur(5) = #Yellow : Couleur(6) = #Magenta 
RandomizeArray(Couleur(),1,6)
version$ = " 5"+ Space(30)
TitreW$ = " YAHTZEE - Y A M S "
chemin$ = ""
SonActif = 0
fon1$ = "courier new normal" : fon2$ = "Modern normal"
If #PB_Compiler_Version => 630  ;## Réglages CreateImage() ########
  Cube_alpha  = 255 
Else ; mettre à zero "Cube_alpha" pour version inferieur à PB 6.30
  Cube_alpha  = 0 
EndIf
bcol = RGBA(173, 173, 173, 0)  ; couleur selection boutons
numero = 5                     ; Mode 5 Dés
Joueur = 1
Cube_Size = 105 
Cube_Points_r = Cube_Size / 10 
For i = 0 To 6
  CreateImage(i, Cube_Size, Cube_Size, 32 , RGBA(255, 255, 255, Cube_alpha))
Next i
For i = 21 To 26
  CreateImage(21, Cube_Size, Cube_Size, 32 , RGBA(255, 255, 255, 30))
Next i
CreateImage(11, 15, 15, 24 , Couleur(1)):CreateImage(12, 15, 15, 24 , Couleur(2)):CreateImage(13, 15, 15, 24 , Couleur(3)):CreateImage(14, 15, 15, 24 , Couleur(4)):CreateImage(15, 15, 15, 24 , Couleur(5)):CreateImage(16, 15, 15, 24 , Couleur(6))
CreateImage(21, 50, 20, 24 , Couleur(1)):CreateImage(22, 50, 20, 24 , Couleur(2)):CreateImage(23, 50, 20, 24 , Couleur(3)):CreateImage(24, 50, 20, 24 , Couleur(4)):CreateImage(25, 50, 20, 24 , Couleur(5)):CreateImage(26, 50, 20, 24 , Couleur(6))
XPosition(1) =  10:XPosition(2) = 130:XPosition(3) = 250:XPosition(4) = 370:XPosition(5) = 490:XPosition(6) = 610
Procedure carre(col, xb)   ; affiche carre autour du bouton selecte
  StartDrawing(WindowOutput(#Window_Des)) 
  LineXY(xb + 7 , 0 + 7 , xb + Cube_Size + 17, 0 + 7 , col):  LineXY(xb + 7 , 1 + 7 , xb + Cube_Size + 17, 1 + 7 , col)
  LineXY(xb + 7 , 2 + 7 , xb + Cube_Size + 17, 2 + 7 , col):  LineXY(xb + 7 , 3 + 7 , xb + Cube_Size + 17, 3 + 7 , col)
  ;ligne bas
  LineXY(xb + 1 + 7, Cube_Size-3 + 18, xb + Cube_Size + 17, Cube_Size-3 + 18, col)
  LineXY(xb + 1 + 7, Cube_Size-2 + 18, xb + Cube_Size + 17, Cube_Size-2 + 18, col)
  LineXY(xb + 1 + 7, Cube_Size-1 + 18, xb + Cube_Size + 17, Cube_Size-1 + 18, col)
  LineXY(xb + 1 + 7, Cube_Size   + 18, xb + Cube_Size + 17, Cube_Size   + 18, col)
  ;ligne gauche
  LineXY(xb + 3 + 7, 7, xb +  3 + 7, Cube_Size + 17 , col) 
  LineXY(xb + 2 + 7, 7, xb +  2 + 7, Cube_Size + 17 , col)
  LineXY(xb + 1 + 7, 7, xb +  1 + 7, Cube_Size + 17 , col)
  LineXY(xb + 0 + 7, 7, xb +  0 + 7, Cube_Size + 17 , col)
  ;ligne droite
  LineXY(xb + Cube_Size-3 + 17 , 7, xb + Cube_Size-3 + 17, Cube_Size + 17 , col)
  LineXY(xb + Cube_Size-2 + 17 , 7, xb + Cube_Size-2 + 17, Cube_Size + 17 , col)
  LineXY(xb + Cube_Size-1 + 17 , 7, xb + Cube_Size-1 + 17, Cube_Size + 17 , col)
  LineXY(xb + Cube_Size   + 17 , 7, xb + Cube_Size   + 17, Cube_Size + 17 , col)
  StopDrawing()
EndProcedure
Procedure ButtonTextColor(ni, txi, tyi, xt, yt, T$, Cf, Cb, Ht, Styl, fon$)  
  If IsImage(ni):FreeImage(ni):EndIf
  If CreateImage(ni, txi, tyi, 32, Cb)
    FtArial = LoadFont(1, fon$, Ht, Styl)
    StartDrawing(ImageOutput(ni))
    DrawingFont(FtArial)
    DrawingMode(1)
    DrawText(xt+1, yt-1, T$, RGBA(0, 0, 0, Cube_alpha), cb)
    DrawText(xt, yt, T$, Cf, Cb)
    DrawingFont(GetStockObject_(#SYSTEM_FONT))
    StopDrawing()
  EndIf
EndProcedure 
Procedure Col_Joueur(Jco)
  If Jco = 1 : Jcolor = Couleur(1) : EndIf:If Jco = 2 : Jcolor = Couleur(2) : EndIf:If Jco = 3 : Jcolor = Couleur(3) : EndIf:If Jco = 4 : Jcolor = Couleur(4) : EndIf:If Jco = 5 : Jcolor = Couleur(5) : EndIf:  If Jco = 6 : Jcolor = Couleur(6) : EndIf:SetWindowColor(#Window_Des, Jcolor)
EndProcedure
Procedure CheckBox_0()
  ; reactive en gris le bouton valide return avant les 3 coup de des
  ButtonTextColor(7, 350, 34, 56, 11, Language$(9), RGBA(0, 0, 0, 0), RGBA(220, 220, 220, 128), 8, 0, fon2$)
  ButtonImageGadget(17, 350, 145, Cube_Size + 145, 30, ImageID(7), #PB_Button_Toggle)
  For i = 1 To 6 : SetGadgetState(20 + i, 0) : Des_Fixe(i) = 0: Next i
  For i = 1 To 6
    ButtonImageGadget(i, XPosition(i), 10, Cube_Size + 5, Cube_Size + 5, ImageID(0), #PB_Image_Border | #PB_Button_Toggle)
  Next i
EndProcedure
Procedure StateMenu(a)
  If a = 0 : For i = 1 To  6 : SetMenuItemState(0, i, 0) : Next i : EndIf
  If a = 1 : For i = 11 To 16 : SetMenuItemState(0, i, 0) : Next i : EndIf
EndProcedure
Procedure NewMenuIcon(Nimg.l, co.l) 
  CreateImage(Nimg, 16, 16, 32) 
  StartDrawing(ImageOutput(Nimg))
  DrawingMode(#PB_2DDrawing_Default )
  Box(0, 0, 15, 15, co) 
  DrawingMode(#PB_2DDrawing_Outlined )
  Box(0, 0, 16, 16, RGBA(127, 127, 127, 255))
  StopDrawing() 
  ProcedureReturn ImageID(Nimg) 
EndProcedure  
Procedure efface_des(ne)
  StartDrawing(ImageOutput(ne))  
  DrawingMode(0) 
  Box(0, 0, Cube_Size - 1, Cube_Size - 1, RGB(255, 255, 255)) 
  StopDrawing()  
  SetGadgetState(ne, ImageID(ne))
  SetWindowTitle(0, TitreW$ + version$ + Space(15) + Language$(7) + Str(Joueur))
  ButtonTextColor(8, 350, 34, 110, 11, Language$(8), RGBA(0, 0, 0, 0), RGBA(220, 250, 190, 100), 8, 0, fon2$)
  ButtonImageGadget(15, XPosition(1), 145, Cube_Size + 131, 30, ImageID(8), #PB_Button_Toggle)
  ; affiche gains
  ButtonTextColor(105, 92, 28, -10, 6, "", RGBA(255, 255, 255, Cube_alpha), RGBA(255, 255, 255, Cube_alpha), 12, 0, fon1$)
  ButtonImageGadget(105, 248, 146, 100, 28, ImageID(105))
EndProcedure
Procedure test_select()
  block = 0 : For i = 1 To 5 : If GetGadgetState(20 + i) = 0 : block + 1 : EndIf : Next i
  If  block = 5 : score$ = Language$(35) : Total2$ = "" : EndIf
EndProcedure
Procedure vocal(chemin$, dicte$,tmp)   ; donner de la voix aux resultats
  
  ;precedure en attente de fichiers son
  ;#####################################################################################  ;Utiliza este sitio para crear letras durante el juego "https://soundoftext.com/)
  ;copiar los archivos paroles.OGG en el directorio del Yahtzee
  ;Nutze diese Website, um während des Spiels Songtexte zu erstellen "https://soundoftext.com/)
  ;Kopieren Sie die Dateien paroles.OGG in das Yahtzee-Verzeichnis
  ;Use this site to create lyrics during the game "https://soundoftext.com/)
  ;copy the paroles.OGG files to the Yahtzee directory
  ;Utiliser ce site pour creer des paroles pendant le jeu "https://soundoftext.com/)
  ;copier les fichiers paroles.OGG dans repertoire du Yahtzee
  ;Default file names example : 10.ogg, 15.ogg, 20.ogg, 25.ogg, 30.ogg, 40.ogg, 50.ogg
  ;#####################################################################################
  If InitSound()                       ; Initialisation des Sons
    UseOGGSoundDecoder()               ; Utilisation des fichiers ogg
    If LoadSound(0, #PB_Compiler_Home + chemin$ + dicte$)
      PlaySound(0, #PB_Sound_Loop):  Delay(tmp) : FreeSound(0)                     ; Le son est libéré
    EndIf
  EndIf 
EndProcedure
Procedure range()
  For i = 1 To 5 : triage$(i) = Mid(Total2$,i ,1) : Next i 
  SortArray(triage$(), #PB_Sort_Ascending)
  Total2$ = triage$(1) + triage$(2) + triage$(3) + triage$(4) + triage$(5)
EndProcedure
Procedure Cherche2paires()
  Range(): uu = 0
  For ii = 1 To 6 
    If CountString(total2$,Paire$(ii)) : uu = uu + 1 : If uu = 2 : Score$ = Language$(36)
        Else : Score$ = "" : EndIf : EndIf 
  Next ii
EndProcedure
Procedure Cherche_Petite_Suite()
  ;Cherche_Petite_Suite 
  Range() : If Left(total2$,4) = "1234"    : Score$ = Language$(32) : EndIf
  Range() : If Left(total2$,4) = "2345"    : Score$ = Language$(32) : EndIf
  Range() : If Left(total2$,4) = "3456"    : Score$ = Language$(32) : EndIf
  Range() : If Left(total2$,5) = "11234"   : Score$ = Language$(32) : EndIf
  Range() : If Left(total2$,5) = "12234"   : Score$ = Language$(32) : EndIf
  Range() : If Left(total2$,5) = "12334"   : Score$ = Language$(32) : EndIf
  Range() : If Left(total2$,5) = "22345"   : Score$ = Language$(32) : EndIf
  Range() : If Left(total2$,5) = "23345"   : Score$ = Language$(32) : EndIf
  Range() : If Left(total2$,5) = "23445"   : Score$ = Language$(32) : EndIf
  Range() : If Left(total2$,5) = "33456"   : Score$ = Language$(32) : EndIf
  Range() : If Left(total2$,5) = "34456"   : Score$ = Language$(32) : EndIf 
  Range() : If Left(total2$,5) = "34556"   : Score$ = Language$(32) : EndIf
  Range() : If Left(total2$,5) = "13456"   : Score$ = Language$(32) : EndIf
EndProcedure
Procedure Combinaisons()
  
  ;To do this, I set these two minor options To 10 points For pairs And 15 points 
  ;For minor straights of 4 dice; do not change the order of these point values, 
  ;As doing so could disrupt the display of the results.
  ;Recherche des repetitions de chiffres dans Total2 trié en croissance
  Calcul1$ = Str(CountString(Total2$, "1"))
  Calcul2$ = Str(CountString(Total2$, "2"))   
  Calcul3$ = Str(CountString(Total2$, "3"))
  Calcul4$ = Str(CountString(Total2$, "4"))
  Calcul5$ = Str(CountString(Total2$, "5"))
  Calcul6$ = Str(CountString(Total2$, "6"))
  ; Total3 = Second Rangement Croissant
  Total3$ = Calcul1$ + Calcul2$ + Calcul3$ + Calcul4$ + Calcul5$ + Calcul6$
  ; Recherche des Combinaisons selon les règles du YAMS standard
  If ToPair = 1 : Cherche2paires() : EndIf
  If CountString(Total3$, "3")     = #True : Score$ = Language$(29) : EndIf 
  If CountString(Total3$, "3")     = #True
  If CountString(Total3$, "2")     = #True : Score$ = Language$(30) : EndIf : EndIf
  If CountString(Total3$, "4")     = #True : Score$ = Language$(31) : EndIf
  If CountString(Total3$, "5")     = #True : Score$ = Language$(34) : EndIf
  If Pt_Suite = 1 : Cherche_Petite_Suite() : EndIf
  ;grande suite
  range() : If Left(total2$,5) = "12345"   : Score$ = Language$(33) : EndIf
  range() : If Left(total2$,5) = "23456"   : Score$ = Language$(33) : EndIf
  If score$ = "" : score$ = Language$(35) : EndIf
  ; change couleur passe return en vert
  If score$ = Language$(30) Or score$ = Language$(33) ;Or score$ = Language$(29) Or score$ = Language$(31)
    ButtonTextColor(7, 350, 34, 56, 11, Language$(9), RGBA(0, 0, 0, 0), RGBA(135, 235, 125, 128), 8, 0, fon2$)
    ButtonImageGadget(17, 350, 145, Cube_Size + 145, 30, ImageID(7), #PB_Button_Toggle)
  Else
    ButtonTextColor(7, 350, 34, 56, 11, Language$(9), RGBA(0, 0, 0, 0), RGBA(220, 220, 220, 128), 8, 0, fon2$)
    ButtonImageGadget(17, 350, 145, Cube_Size + 145, 30, ImageID(7), #PB_Button_Toggle) 
  EndIf
EndProcedure
Procedure Score_des_Joueur_options(ns, Joueur) 
  If Lancer <= 3
    ; copie Resultat en Resultat2 pour le tri et garde position origine DES dans Resultat
    CopyArray(Resultat(), Resultat2()) 
    Total1$ = "" : Total2$ = ""
    For i = 1 To  ns : Total1$ = Total1$ + Str(Resultat2(i)) : Next i ; stock Resultat2 en Total1
    SortArray(Resultat2(), #PB_Sort_Ascending  , 1 , ns)
    For i = 1 To  ns : Total2$ = Total2$ + Str(Resultat2(i)) : Next i ; stock Resultat2 tri en Total2
    Combinaisons()
    SetWindowTitle(0, TitreW$ + version$ + Space(15) + Language$(7) + Str(Joueur)+Space(10) + Score$)
    ;##############################################################################################
    ;Creer des son.OGG avec des noms de scores
    ;Activer la Procedure vocal(chemin$, dicte$,tmp)
    If lancer = 3 And Score$ = "" : Score$ = Language$(35)       : EndIf 
    If SonActif = 1 ; score sonor
      If score$ = Language$(36)  : vocal(chemin$, "10.ogg", 400) : EndIf : If score$ = Language$(29)  : vocal(chemin$, "20.ogg", 400) : EndIf: If score$ = Language$(30)  : vocal(chemin$, "25.ogg", 700) : EndIf: If score$ = Language$(31)  : vocal(chemin$, "30.ogg", 400) : EndIf: If score$ = Language$(32)  : vocal(chemin$, "15.ogg", 400) : EndIf: If score$ = Language$(33)  : vocal(chemin$, "40.ogg", 400) : EndIf
      If Lancer = 3 : If score$ = Language$(34)  : vocal(chemin$, "50.ogg", 400) : EndIf : EndIf
    EndIf
  EndIf
  If score$ = Language$(34)  : Lancer = 3  : EndIf ; valide le resultat
  SetWindowTitle(0, TitreW$ + version$ + Space(15) + Language$(7) + Str(Joueur)+Space(10) + Score$)
  ButtonTextColor(105, 92, 28, -10, 6, "  " + Score$, Jcolor, RGBA(255, 255, 255, Cube_alpha), 12, 0, fon1$)
  ButtonImageGadget(105, 248, 145, 100, 30, ImageID(105))
EndProcedure
Procedure Score_des_Joueur_List(ns, Joueur)
  If Lancer <= 3
    ; copie Resultat en Resultat2 pour le tri et garde position origine DES dans Resultat
    CopyArray(Resultat(), Resultat2()) 
    Total1$ = "" : Total2$ = ""
    For i = 1 To  ns : Total1$ = Total1$ + Str(Resultat2(i)) : Next i ; stock Resultat2 en Total1
    SortArray(Resultat2(), #PB_Sort_Ascending  , 1 , ns)
    For i = 1 To  ns : Total2$ = Total2$ + Str(Resultat2(i)) : Next i ; stock Resultat2 tri en Total2
    Combinaisons()
    ScoreJoueur(Joueur) = ScoreJoueur(Joueur) + Val(Right(Score$, 2))
    TourJoueur(Joueur) = TourJoueur(Joueur) + 1
    If TourJoueur(Joueur) > 0
      ScoreChance(Joueur) =  ((scoreJoueur(Joueur) * 2) / TourJoueur(Joueur)) ; %
    EndIf
    AddGadgetItem (40, -1, " n°"+ Str(Joueur)+Chr(10)+Str(ScoreJoueur(Joueur))+Chr(10)+LTrim(Score$)+Chr(10)+Str(TourJoueur(Joueur))+Chr(10)+Str(ScoreChance(Joueur))+"%"+Chr(10)+Total1$, ImageID(Joueur+10)) 
    ;Affiche le dernier coup visible avec scoll ascenseur mis en bas
    SetGadgetState(40, CountGadgetItems(40)-1) 
    AddElement(Ranglist())
    Ranglist()\Num = Joueur
    Ranglist()\Tours = TourJoueur(Joueur)
    Ranglist()\Points = ScoreJoueur(Joueur) 
    SortStructuredList(Ranglist(), #PB_Sort_Descending, OffsetOf(yams\tours), TypeOf(yams\tours))
    SortStructuredList(Ranglist(), #PB_Sort_Descending, OffsetOf(yams\Points), TypeOf(yams\Points))
    ClearGadgetItems(42)
    For i = 1 To 6          
      Filtre(i) = 1
    Next i 
    ForEach  Ranglist()
      If Filtre(Ranglist()\Num) = 1      ; Filtre 
        Filtre(Ranglist()\Num) = 0       ; Filtre pas plus de 6 résultats dans le ListIconGadget()
        AddGadgetItem(42, -1, "" +Ranglist()\Num+Chr(10)+""+Ranglist()\Tours+Chr(10)+""+Ranglist()\Points, ImageID(Ranglist()\Num + 10))  
        Lancer = 4
      EndIf
    Next
  EndIf
  If Lancer = 4 
    ButtonTextColor(8,350, 34, 66, 11, Language$(10) + Score$ + "  -->", RGBA(0, 0, 0, 0), RGBA(220, 165, 195, 200), 8, 0, fon2$)
    ButtonImageGadget(15,XPosition(1), 145, Cube_Size + 131, 30, ImageID(8), #PB_Button_Toggle)
    ButtonTextColor(7, 350, 34, 56, 11, Language$(9), RGBA(0, 0, 0, 0), RGBA(220, 220, 220, 128), 8, 0, fon2$)
    ButtonImageGadget(17, 350, 145, Cube_Size + 145, 30, ImageID(7), #PB_Button_Toggle)
    Score$ = ""
    For i = 0 To 600 Step 120 ; efface cadres cubes selectes
      carre(jcolor, i)
      SetGadgetState(20 + ((i/120)+1), 0)
    Next i
  EndIf 
EndProcedure   
Procedure DrawCube(numero, Nr.l) 
  ;Author Procedure : NicTheQuick
  Protected a.l, x.l, y.l, drhx.l, drhy.l 
  If Nr < 0 And Nr > 6 : ProcedureReturn #False : EndIf 
  If numero > 0 
    Restore Cube_Pos 
    a = Nr * (Nr - 1) / 2 
    While a : Read.l x : Read.l y : a - 1 : Wend 
    StartDrawing(ImageOutput(numero))  
    DrawingMode(0)
    Box(0, 0, Cube_Size - 1, Cube_Size - 1, RGB(255, 255, 255)) 
    drhx = Random(1) 
    drhy = Random(1) 
    For a = 1 To Nr 
      Read.l x : If drhx : x = 100 - x : EndIf 
      Read.l y : If drhy : y = 100 - y : EndIf 
      x = x * Cube_Size / 100 
      y = y * Cube_Size / 100 
      If ColorDes = 1  ; Points de Dés au couleur du jour
        Circle(x + 2, y - 1, Cube_Points_r, RGB(110, 110, 110)) ;couleur de l'ombre
        Circle(x, y, Cube_Points_r, $000000)
      Else
        Circle(x + 2, y - 1, Cube_Points_r, RGB(80, 80, 80)) ;couleur de l'ombre
        Circle(x, y, Cube_Points_r, Jcolor) 
      EndIf
    Next 
    StopDrawing() 
    ProcedureReturn numero 
  Else 
    ProcedureReturn #False 
  EndIf 
  DataSection 
    Cube_Pos: 
    Data.l 50, 50 
    Data.l 25, 25, 75, 75 
    Data.l 25, 25, 50, 50, 75, 75 
    Data.l 25, 25, 75, 25, 25, 75, 75, 75 
    Data.l 25, 25, 75, 25, 50, 50, 25, 75, 75, 75 
    Data.l 25, 25, 75, 25, 25, 50, 75, 50, 25, 75, 75, 75 
  EndDataSection 
EndProcedure 
Procedure des(numero)
  If numero = 1
    If GetGadgetState(20 + numero) = 0
      Resultat(numero) = Random(5) + 1
      DrawCube(numero, Resultat(numero)) 
      ButtonImageGadget(numero, XPosition(numero), 10, Cube_Size + 5, Cube_Size + 5, ImageID(numero), #PB_Image_Border | #PB_Button_Toggle)
      SetGadgetState(numero, ImageID(numero)) 
    EndIf
    total$ = Str(Resultat(1))
  EndIf
  If numero = 2
    If GetGadgetState(20 + numero) = 0
      Resultat(numero) = Random(5) + 1
      DrawCube(numero, Resultat(numero)) 
      ButtonImageGadget(numero, XPosition(numero), 10, Cube_Size + 5, Cube_Size + 5, ImageID(numero), #PB_Image_Border | #PB_Button_Toggle)
      SetGadgetState(numero, ImageID(numero))
    EndIf
    total$ = Str(Resultat(1) + Resultat(2))
  EndIf
  If numero = 3
    If GetGadgetState(20 + numero) = 0
      Resultat(numero) = Random(5) + 1
      DrawCube(numero, Resultat(numero))  
      ButtonImageGadget(numero, XPosition(numero), 10, Cube_Size + 5, Cube_Size + 5, ImageID(numero), #PB_Image_Border | #PB_Button_Toggle)
      SetGadgetState(numero, ImageID(numero)) 
    EndIf
    total$ = Str(Resultat(1) + Resultat(2) + Resultat(3))
  EndIf
  If numero = 4
    If GetGadgetState(20 + numero) = 0
      Resultat(numero) = Random(5) + 1 
      DrawCube(numero, Resultat(numero))  
      ButtonImageGadget(numero, XPosition(numero), 10, Cube_Size + 5, Cube_Size + 5, ImageID(numero), #PB_Image_Border | #PB_Button_Toggle)
      SetGadgetState(numero, ImageID(numero)) 
    EndIf
    total$ = Str(Resultat(1) + Resultat(2) + Resultat(3) + Resultat(4))
  EndIf
  If numero = 5
    If GetGadgetState(20 + numero) = 0
      Resultat(numero) = Random(5) + 1
      DrawCube(numero, Resultat(numero)) 
      ButtonImageGadget(numero, XPosition(numero), 10, Cube_Size + 5, Cube_Size + 5, ImageID(numero), #PB_Image_Border | #PB_Button_Toggle)
      SetGadgetState(numero, ImageID(numero))
    EndIf
    total$ = Str(Resultat(1) + Resultat(2) + Resultat(3) + Resultat(4) + Resultat(5))
  EndIf
EndProcedure
Procedure Partie_Lancer(n)
  If Lancer <= 3 
    For i =1 To 5 : If Des_Fixe(i) = 0 : efface_des(i) : EndIf : Next i
    For i = 1 To n : If Des_Fixe(i) = 0 : des(i) : EndIf :  Next i   
    SetWindowTitle(0, TitreW$ + version$ + Space(15) + Language$(7) + Str(Joueur))
    StateMenu(0) : SetMenuItemState(0, 5, GetMenuItemState(0, 5))
    ; CacheBouton() : HideGadget(15, #False) 
    Total = Resultat(1) + Resultat(2) + Resultat(3) + Resultat(4) + Resultat(5)
    If Lancer = 1
      ButtonTextColor(8,350, 34, 100, 11, Language$(11), RGBA(0, 0, 0, 0), RGBA(220, 250, 190, 100), 8, 0, fon2$)
      ButtonImageGadget(15,XPosition(1), 145, Cube_Size + 131, 30, ImageID(8), #PB_Button_Toggle)
      Score_des_Joueur_options(n, Joueur) : test_select()
    EndIf
    If Lancer = 2 
      ButtonTextColor(8,350, 34, 100, 11, Language$(12), RGBA(0, 0, 0, 0), RGBA(220, 250, 190, 100), 8, 0, fon2$)
      ButtonImageGadget(15,XPosition(1), 145, Cube_Size + 131, 30, ImageID(8), #PB_Button_Toggle)
      Score_des_Joueur_options(n, Joueur) : test_select()
    EndIf
    If Lancer = 3 
      ButtonTextColor(8,350, 34, 100, 11, Language$(13), RGBA(0, 0, 0, 0), RGBA(220, 250, 190, 100), 8, 0, fon2$)
      ButtonImageGadget(15,XPosition(1), 145, Cube_Size + 131, 30, ImageID(8), #PB_Button_Toggle)
      Score_des_Joueur_options(n, Joueur) : test_select()
      Score_des_Joueur_List(n, Joueur)
    EndIf
    Lancer = Lancer + 1
  EndIf
EndProcedure
Procedure Main_Joueur(main)
  If GetGadgetState(main) = 1
    carre(Jcolor, 120 * (main - 1))
    Des_Fixe(main) = 0
    SetGadgetState(20 + main, 0)
    SetGadgetState(main, ImageID(main)) 
  Else
    carre(bcol, 120 * (main - 1))
    Des_Fixe(main) = 1
    SetGadgetState(20 + main, 1) 
  EndIf 
EndProcedure
Procedure AfficheBoutons()
  ;// Sélection du Joueur listIcone
  SetMenuItemBitmaps_(MenuID(0), 11  , #MF_BYCOMMAND, NewMenuIcon(11, Couleur(1)), 0) 
  SetMenuItemBitmaps_(MenuID(0), 12  , #MF_BYCOMMAND, NewMenuIcon(12, Couleur(2)), 0) 
  SetMenuItemBitmaps_(MenuID(0), 13  , #MF_BYCOMMAND, NewMenuIcon(13, Couleur(3)), 0) 
  SetMenuItemBitmaps_(MenuID(0), 14  , #MF_BYCOMMAND, NewMenuIcon(14, Couleur(4)), 0) 
  SetMenuItemBitmaps_(MenuID(0), 15  , #MF_BYCOMMAND, NewMenuIcon(15, Couleur(5)), 0) 
  SetMenuItemBitmaps_(MenuID(0), 16  , #MF_BYCOMMAND, NewMenuIcon(16, Couleur(6)), 0)
  ;// Sélection du Joueur
  ButtonTextColor(51, 180, 40, 47, 11, Language$(1), Couleur(1), RGBA(220, 220, 220, Cube_alpha), 12, #PB_Font_Bold, fon1$)
  ButtonImageGadget(51, 10, 333, 90, 34, ImageID(51), #PB_Button_Toggle):
  ButtonTextColor(52, 180, 40, 47, 11, Language$(2), Couleur(2), RGBA(220, 220, 220, Cube_alpha), 12, #PB_Font_Bold, fon1$)
  ButtonImageGadget(52, 109, 333, 90, 34, ImageID(52), #PB_Button_Toggle)
  ButtonTextColor(53, 180, 40, 47, 11, Language$(3), Couleur(3), RGBA(220, 220, 220, Cube_alpha), 12, #PB_Font_Bold, fon1$)
  ButtonImageGadget(53, 209, 333, 90, 34, ImageID(53), #PB_Button_Toggle)
  ButtonTextColor(54, 180, 40, 47, 11, Language$(4), Couleur(4), RGBA(220, 220, 220, Cube_alpha), 12, #PB_Font_Bold, fon1$)
  ButtonImageGadget(54, 309, 333, 90, 34, ImageID(54), #PB_Button_Toggle)
  ButtonTextColor(55, 180, 40, 47, 11, Language$(5), Couleur(5), RGBA(220, 220, 220, Cube_alpha), 12, #PB_Font_Bold, fon1$)
  ButtonImageGadget(55, 409, 333, 90, 34, ImageID(55), #PB_Button_Toggle)
  ButtonTextColor(56, 180, 40, 47, 11, Language$(6), Couleur(6), RGBA(220, 220, 220, Cube_alpha), 12, #PB_Font_Bold, fon1$)
  ButtonImageGadget(56, 509, 333, 90, 34, ImageID(56), #PB_Button_Toggle)
  ButtonTextColor(105, 92, 28, -10, 6, "", RGBA(255, 255, 255, Cube_alpha), RGBA(255, 255, 255, Cube_alpha), 12, 0, fon1$)
  ButtonImageGadget(105, 248, 145, 100, 30, ImageID(105))
EndProcedure
Procedure Reset_Efface_Tout() 
  ; Efface les toutes parties et remise zero des scores
  RandomizeArray(Couleur(),1,6)
  ClearGadgetItems(40) : ClearGadgetItems(42)
  For i = 1 To 6 
    Resultat(i) = 0 : Resultat2(i) = 0 : ScoreJoueur(i) = 0 : ScoreChance(i) = 0 : TourJoueur(i) = 0
  Next i
  For i = 1 To 5       ; Effece les dés
    efface_des(i)
    ButtonImageGadget(i, XPosition(i), 10, Cube_Size + 5, Cube_Size + 5, ImageID(i), #PB_Image_Border | #PB_Button_Toggle)
    SetGadgetState(i, 1)
  Next i
  Total1$ = "" : Total2$ = ""
  ForEach  Ranglist()
    Ranglist()\Num = 0
    Ranglist()\Tours = 0
    Ranglist()\Points = 0
  Next
  For i = 0 To 600 Step 120 ; Efface cadres cubes selectes
    carre(jcolor, i)
  Next i
  Calcul1$ = "": Calcul2$ = "": Calcul3$ = "": Calcul4$ = "": Calcul5$ = "": Calcul6$ = ""
  CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 11, GetMenuItemState(0, 11)!1) : Col_Joueur(1) : Joueur = 1
  For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1
  AfficheBoutons()
EndProcedure 
If OpenWindow(1, 0, 0, 220, 260, "YAHTZEE -  Kernadec  - YAM'S", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  StickyWindow(1,#True) 
  ButtonGadget(0, 10,  10, 200, 30, "Français"): ButtonGadget(1, 10,  50, 200, 30, "Anglais"): ButtonGadget(2, 10,  90, 200, 30, "Allemand"): ButtonGadget(3, 10, 130, 200, 30, "Espagnol")
  CheckBoxGadget(4, 8 , 190, 205, 12, "Ptsuite, Sequen4, Fortset4, Esquale4") 
  CheckBoxGadget(5, 8 , 207, 205, 12, "2 Paires, 2 pairs, 2 Paar, 2 Pares") 
  CheckBoxGadget(6, 8 , 224, 205, 12, "Point = Voix, Voice, Stimme, Voz") 
  GadgetToolTip(6, "Valeur phonétique , Phonetic Value, Lautwert, Valor fonético")
  TextGadget(7, 86, 170,45,20,"Options")
  TextGadget(8, 10, 242,220,20,"       version " + Left(version$,2) + " -  aout MMXXVI")
  Repeat
    Event = WaitWindowEvent()
    Select Event
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0 : lg = 1  :Break
          Case 1 : lg = 2 : Break
          Case 2 : lg = 3 : Break
          Case 3 : lg = 4 : Break
            Case 4 : If GetGadgetState(4) : SetGadgetState(4,1) : Pt_Suite = 1 : Else : SetGadgetState(4,0) : Pt_Suite = 0  : EndIf
            Case 5 : If GetGadgetState(5) : SetGadgetState(5,1) : Topair = 1   : Else : SetGadgetState(5,0) : Topair = 0 : EndIf
            Case 6 : If GetGadgetState(6) : SetGadgetState(6,1) : SonActif = 1 : Else : SetGadgetState(6,0) : SonActif = 0 : EndIf
        EndSelect 
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf
CloseWindow(1)
If lg = 0 : lg = 1 : EndIf
Country(lg)
;// adresse de telechargement de fichier son ogg pour la diction des pointsé 
;// https://drive.google.com/file/d/1d92Pp6kI0QqeRo7SpAL_tIAI3SH-hE-L/view?usp=drive_link
If lg = 1 : Chemin$ = "Yahtzee_French\" : EndIf
If lg = 2 : Chemin$ = "Yahtzee_English\" : EndIf
If lg = 3 : Chemin$ = "Yahtzee_German\" : EndIf
If lg = 4 : Chemin$ = "Yahtzee_Spain\" : EndIf
;sauve langue  traduction en fichiers externes
; CreateFile(0,"Langue"+ Str(lg) + ".txt")
; For u=1 To 35 
;   WriteStringN(0,Language$(u))
; Next u     
; CloseFile(0)
;charge langue ; lecture du fichier de données- read file
; If ReadFile(0,"Langue"+ Str(lg) + ".txt") <> 0 : u = 1          
;   While Eof(0) = 0
;     Language1$(u) = ReadString(0,#PB_Ascii)
;     u + 1
;   Wend  
;   CloseFile(0) 
;EndIf 
If OpenWindow(#Window_Des, 0, 0, Cube_Size + XPosition(numero) + 15, 294 + Cube_Size, TitreW$ + version$, #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
  If CreateMenu(0, WindowID(#Window_Des))    
    MenuTitle(Language$(27))
    MenuItem(11, Language$(1) + Chr(9) + "/ Key 1")  ;Cyan
    MenuItem(12, Language$(2) + Chr(9) + "/ Key 2")  ;Rouge
    MenuItem(13, Language$(3) + Chr(9) + "/ Key 3")  ;Vert 
    MenuItem(14, Language$(4) + Chr(9) + "/ Key 4")  ;Blue 
    MenuItem(15, Language$(5) + Chr(9) + "/ Key 5")  ;Jaune
    MenuItem(16, Language$(6) + Chr(9) + "/ Key 6")  ;violet
    MenuBar()
    MenuItem(17, Language$(15))
    MenuItem(18, Language$(16))
    MenuItem(25, Language$(32))
    MenuItem(26, Language$(36))
    MenuItem(23, Language$(17) + Chr(9) + "/ Ctrl Del")
    MenuItem(24, Language$(18))
    MenuTitle("       " + Language$(14))
  EndIf
  SetMenuItemState(0, 5, GetMenuItemState(0, 5))
  SetMenuItemState(0, 11, GetMenuItemState(0, 11))
  If ColorDes = 0 
    ColorDes = 0 
    SetMenuItemState(0,17,1)
  Else 
    ColorDes = 1 
    SetMenuItemState(0,17,0)
  EndIf
  Paire$(1) = "11":Paire$(2) = "22":Paire$(3) = "33":Paire$(4) = "44":Paire$(5) = "55":Paire$(6) = "66"
  SetMenuItemBitmaps_(MenuID(0), 17  , #MF_BYCOMMAND, NewMenuIcon(17, RGBA(150, 215, 255, 100)), 0)
  SetMenuItemBitmaps_(MenuID(0), 18  , #MF_BYCOMMAND, NewMenuIcon(18, RGBA(150, 215, 255, 100)), 0)
  ButtonTextColor(7, 350, 34, 56, 11, Language$(9), RGBA(0, 0, 0, 0), RGBA(220, 220, 220, 128), 8, 0, fon2$)
  ButtonImageGadget(17, 350, 145, Cube_Size + 145, 30, ImageID(7), #PB_Button_Toggle)
  AfficheBoutons()
  ButtonTextColor(105, 92, 28, -10, 6, "", RGBA(255, 255, 255, Cube_alpha), RGBA(255, 255, 255, Cube_alpha), 12, 0, fon1$)
  ButtonImageGadget(105, 248, 145, 100, 30, ImageID(105))
  ButtonImageGadget(1, XPosition(1), 10, Cube_Size + 5, Cube_Size + 5, ImageID(1), #PB_Image_Border | #PB_Button_Toggle)
  ButtonImageGadget(2, XPosition(2), 10, Cube_Size + 5, Cube_Size + 5, ImageID(2), #PB_Image_Border | #PB_Button_Toggle) 
  ButtonImageGadget(3, XPosition(3), 10, Cube_Size + 5, Cube_Size + 5, ImageID(3), #PB_Image_Border | #PB_Button_Toggle) 
  ButtonImageGadget(4, XPosition(4), 10, Cube_Size + 5, Cube_Size + 5, ImageID(4), #PB_Image_Border | #PB_Button_Toggle) 
  ButtonImageGadget(5, XPosition(5), 10, Cube_Size + 5, Cube_Size + 5, ImageID(5), #PB_Image_Border | #PB_Button_Toggle) 
  ButtonImageGadget(6, XPosition(6), 10, Cube_Size + 5, Cube_Size + 5, ImageID(6), #PB_Image_Border | #PB_Button_Toggle)  
  ButtonTextColor(8,350, 34, 100, 11, Language$(19), RGBA(0, 0, 0, 0), RGBA(220, 250, 190, 100), 8, 0, fon2$)
  ButtonImageGadget(15,XPosition(1), 145, Cube_Size + 131, 30, ImageID(8), #PB_Button_Toggle)
  CheckBoxGadget(21, XPosition(1) + 50 ,  125, 30, 12, "F1") 
  CheckBoxGadget(22, XPosition(2) + 50 ,  125, 30, 12, "F2") 
  CheckBoxGadget(23, XPosition(3) + 50 ,  125, 30, 12, "F3") 
  CheckBoxGadget(24, XPosition(4) + 50 ,  125, 30, 12, "F4") 
  CheckBoxGadget(25, XPosition(5) + 50 ,  125, 30, 12, "F5") 
  CheckBoxGadget(26, XPosition(6) + 50 ,  125, 12, 12, "")   ; non key 
  ListIconGadget(40, 10, 180, WindowWidth(#Window_Des) - 169, 145, Language$(28), 48, #PB_ListIcon_GridLines)
  AddGadgetColumn(40, 1, Language$(20), (WindowWidth(#Window_Des) - 12) / 8)
  AddGadgetColumn(40, 2, Language$(21), (WindowWidth(#Window_Des) - 12) / 7)
  AddGadgetColumn(40, 3, Language$(22), (WindowWidth(#Window_Des) - 12) / 8)
  AddGadgetColumn(40, 4, Language$(23), (WindowWidth(#Window_Des) - 42) / 9)
  AddGadgetColumn(40, 5, Language$(24), (WindowWidth(#Window_Des) - 12) / 8)
  ListIconGadget(42, 450, 180, 150, 145, Language$(28), 49, #PB_ListIcon_GridLines) 
  AddGadgetColumn(42, 1, Language$(25), 49)
  AddGadgetColumn(42, 2, Language$(26), 48)
  Col_Joueur(Joueur)
  SetWindowTitle(0, TitreW$ + version$ + Space(15) + Language$(7) + Str(Joueur))
  Joueur = 1
  If Pt_Suite = 1 : SetMenuItemState(0,25,1) : Else : SetMenuItemState(0,25,0) : EndIf
  If ToPair   = 1 : SetMenuItemState(0,26,1) : Else : SetMenuItemState(0,26,0) : EndIf
  If SonActif = 1 : SetMenuItemState(0,18,1) : Else : SetMenuItemState(0,18,0) : EndIf
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_Escape, 27)  ;  27 = Valeur Touche Escape
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_Space, 32)   ;  32 = Valeur Touche Espace
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_1, 101)      ; 1 = Valeur Touche 1
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_Pad1, 111)   ; 1 = Valeur Touche 1
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_2, 102)      ; 2 = Valeur Touche 2
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_Pad2, 112)   ; 2 = Valeur Touche 2
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_3, 103)      ; 3 = Valeur Touche 3
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_Pad3, 113)   ; 2 = Valeur Touche 2
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_4, 104)      ; 4 = Valeur Touche 4
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_Pad4, 114)   ; 2 = Valeur Touche 2
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_5, 105)      ; 5 = Valeur Touche 5
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_Pad5, 115)   ; 2 = Valeur Touche 2
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_6, 106)      ; 6 = Valeur Touche 6
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_Pad6, 116)   ; 2 = Valeur Touche 2
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_F1, 121)     ; 2 = Valeur Touche 121
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_F2, 122)     ; 2 = Valeur Touche 122
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_F3, 123)     ; 2 = Valeur Touche 123
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_F4, 124)     ; 2 = Valeur Touche 124
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_F5, 125)     ; 2 = Valeur Touche 125
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_Return, 130) ;  32 = Valeur Touche Espace
  AddKeyboardShortcut(#Window_Des, #PB_Shortcut_Control | #PB_Shortcut_Delete, 23)  ; Raccourci clavier control delete)
  Repeat   
    Event = WaitWindowEvent() 
    Select Event 
      Case #PB_Event_Menu      ; Un élément du menu a été sélectionné
        Select EventMenu()     ; On recupère le numéro de cet élement...
          Case 11, 101, 111 : CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 11, GetMenuItemState(0, 11)!1) : Col_Joueur(1) : Joueur = 1
            For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1
          Case 12, 102, 112 : CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 12, GetMenuItemState(0, 12)!1) : Col_Joueur(2) : Joueur = 2 
            For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1
          Case 13, 103, 113 : CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 13, GetMenuItemState(0, 13)!1) : Col_Joueur(3) : Joueur = 3 
            For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1
          Case 14, 104, 114 : CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 14, GetMenuItemState(0, 14)!1) : Col_Joueur(4) : Joueur = 4 
            For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1
          Case 15, 105, 115 : CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 15, GetMenuItemState(0, 15)!1) : Col_Joueur(5) : Joueur = 5 
            For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1
          Case 16, 106, 116 : CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 16, GetMenuItemState(0, 16)!1) : Col_Joueur(6) : Joueur = 6 
            For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1 
          Case 17 
            If ColorDes = 0 : ColorDes = 1 : SetMenuItemState(0,17,0): Else : ColorDes = 0 : SetMenuItemState(0,17,1): EndIf
          Case 18  
            If SonActif = 0 : SonActif = 1 : SetMenuItemState(0,18,1): Else : SonActif = 0 : SetMenuItemState(0,18,0): EndIf
          Case 21 
            If GetGadgetState(21) = 0 : SetGadgetState(21, 1):   EndIf
          Case 23 : Reset_Efface_Tout()  ; efface les toutes parties et remise Z des scores
          Case 24 : End
          Case 25  
            If Pt_Suite = 0 : Pt_Suite = 1 : SetMenuItemState(0,25,1) : Else : Pt_Suite = 0 : SetMenuItemState(0,25,0) : EndIf
          Case 26  
            If Topair = 0   : ToPair = 1   : SetMenuItemState(0,26,1) : Else : ToPair  = 0  : SetMenuItemState(0,26,0) : EndIf
          Case 32 : Partie_Lancer(5)  ;Yams
                                      ; ####################### touche F1 à F5
            Case 121 : If Des_Fixe(1) = 0 : Des_Fixe(1) = 1 : SetGadgetState(21, 1) : carre(bcol, 0)   : Else : Des_Fixe(1) = 0 : SetGadgetState(21, 0) : carre(Jcolor, 0)   : EndIf
            Case 122 : If Des_Fixe(2) = 0 : Des_Fixe(2) = 1 : SetGadgetState(22, 1) : carre(bcol, 120) : Else : Des_Fixe(2) = 0 : SetGadgetState(22, 0) : carre(Jcolor, 120) : EndIf
            Case 123 : If Des_Fixe(3) = 0 : Des_Fixe(3) = 1 : SetGadgetState(23, 1) : carre(bcol, 240) : Else : Des_Fixe(3) = 0 : SetGadgetState(23, 0) : carre(Jcolor, 240) : EndIf
            Case 124 : If Des_Fixe(4) = 0 : Des_Fixe(4) = 1 : SetGadgetState(24, 1) : carre(bcol, 360) : Else : Des_Fixe(4) = 0 : SetGadgetState(24, 0) : carre(Jcolor, 360) : EndIf
            Case 125 : If Des_Fixe(5) = 0 : Des_Fixe(5) = 1 : SetGadgetState(25, 1) : carre(bcol, 480) : Else : Des_Fixe(5) = 0 : SetGadgetState(25, 0) : carre(Jcolor, 480) : EndIf
            ;Return Passer Valider
          Case 130
            If Lancer < = 3: Score_des_Joueur_List(numero, Joueur): EndIf
            Lancer = 4
        EndSelect 
      Case #PB_Event_CloseWindow 
        Break 
      Case #PB_Event_Gadget 
        Select EventGadget() 
          Case 15 : Partie_Lancer(5)  ;YAMs
          Case 17                     ; Passe = termine ce tour
            ButtonTextColor(7, 350, 34, 56, 11, Language$(9), RGBA(0, 0, 0, 0), RGBA(220, 220, 220, 255), 8, 0, fon2$)
            ButtonImageGadget(17, 350, 145, Cube_Size + 145, 30, ImageID(7), #PB_Button_Toggle)
            If Lancer < = 3: Score_des_Joueur_List(numero, Joueur): EndIf
            Lancer = 4
          Case 1 : Main_Joueur(1)
          Case 2 : Main_Joueur(2)
          Case 3 : Main_Joueur(3)
          Case 4 : Main_Joueur(4)
          Case 5 : Main_Joueur(5)
          Case 6 : Main_Joueur(6)
          Case 51 : CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 11, GetMenuItemState(0, 11)!1) : Col_Joueur(1) : Joueur = 1
            For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1 
          Case 52 : CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 12, GetMenuItemState(0, 12)!1) : Col_Joueur(2) : Joueur = 2 
            For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1
          Case 53 : CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 13, GetMenuItemState(0, 13)!1) : Col_Joueur(3) : Joueur = 3 
            For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1
          Case 54 : CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 14, GetMenuItemState(0, 14)!1) : Col_Joueur(4) : Joueur = 4 
            For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1
          Case 55 : CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 15, GetMenuItemState(0, 15)!1) : Col_Joueur(5) : Joueur = 5 
            For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1
          Case 56: CheckBox_0() : StateMenu(1) : SetMenuItemState(0, 16, GetMenuItemState(0, 16)!1) : Col_Joueur(6) : Joueur = 6 
            For i = 1 To 6  : efface_des(i) : Next i : Lancer = 1 
        EndSelect 
    EndSelect  
  ForEver 
  CloseWindow(0)
EndIf