sixquiprend.py

Created by florian-allard

Created on November 02, 2024

20.9 KB

Adaptation du jeu “6 qui prend” avec la possibilité de jouer à plusieurs.


from random import randint
from kandinsky import *
from time import sleep
from ion import *

images={"grande":('&$6$&#', '%%&$.$&%%#', "$%'%+&'%$#", "$%'&*&'%$#", '$%(&$%%&(&#', "#&(.''#", "#'&7#", '#=$#', "$9'#", '&4*#', '(1+#', "'3*#", "'3*#", "'3*#", '(1+#', ')/,#', '*--#', '*--#', ')/,#', '(1+#', "'3*#", "'3*#", '(1+#', ')/,#', '++.#', '++.#', ',)/#'),\
"moyenne":('$$.$$', '#%%$($%%#', '#%%%&%%%#', '#2#', '#2#', '&,&', '&,&', "'*'", '&,&', '&,&', '&,&', '&,&', '(((', '((('),
"0":("%'%#", "$$'$$#", '#$%%%$#', '#$$$%$$$#', '#$$$%$$$#', '#$$$%$$$#', '#$$$%$$$#', '#$$$%$$$#', '#$$$%$$$#', '#$%%%$#', "$$'$$#", "%'%#"),"1":('&&%#', '%$%$%#', '$$&$%#', '#$%$$$%#', "#'$$%#", '&$$$%#', '&$$$%#', '&$$$%#', '&$$$%#', '$&$&#', '$$($#', '$*#'),"2":("%'%#", "$$'$$#", '#$%%%$#', '#$$$%$$$#', '#&%$$$#', "'$%$#", '&$%$$#', '%$%$%#', '$$%$&#', '#$%(#', '#$)$#', '#+###'),"3":('$)$#', '#$)$#', '#)$$#', '($$$#', '%&%$#', "$$'$$#", "$'%$#", '($$$#', '$%%$$$#', '#$%%%$#', "$$'$$#", "%'%#"),"4":("'&$#", '&$%$$#', '%$&$$#', '$$%$$$$#', '#$%%$$$#', '#$$$$$$$$#', '#$$%%%#', '#$)$#', '#($%#', "'$$$$#", "'$$$$#", "'&$#"),"5":('$*#', '#$)$#', '#$$)#', '#$$$(#', "#$$'%#", '#$($$#', '#(%$#', '($$$#', '#&%$$$#', '#$%%%$#', "$$'$$#", "%'%#"),"6":('%($#', '$$($#', "#$%'$#", '#$$$(#', "#$$'%#", '#$($$#', '#$$&%$#', '#$$$%$$$#', '#$$$%$$$#', '#$%%%$#', "$$'$$#", "%'%#"),"7":('#+###', '#$)$#', '#(%$#', "'$$$$#", '&$%$$#', '&$$$%#', '%$%$%#', '%$$$&#', '$$%$&#', "$$$$'#", "$$$$'#", "$&'#"),"8":("%'%#", "$$'%#", '#$%%%$#', '#$$$%$$$#', '#$%%%$#', "$$'$$#", '#$%%%$#', '#$$$%$$$#', '#$$$%$$$#', '#$%%%$#', "#%'$$#", "%'%#"),"9":("%'%#", "$$'$$#", '#$%%%$#', '#$$$%$$$#', '#$$$%$$$#', '#$%%%$#', '$$($#', "%'$$#", '($$$#', '#(%$#', '#$($$#', '#)%#'),\
"0_":('#&###', '#$$$#', '#$$$#', '#$$$#', '#&###'),"1_":('$$$#', '#%$#', '$$$#', '$$$#', '#&###'),"2_":('#&###', '%$#', '#&###', '#$%#', '#&###'),"3_":('#&###', '%$#', '#&###', '%$#', '#&###'),"4_":('#$$$#', '#$$$#', '#&###', '%$#', '%$#'),"5_":('#&###', '#$%#', '#&###', '%$#', '#&###'),"6_":('#&###', '#$%#', '#&###', '#$$$#', '#&###'),"7_":('#&###', '%$#', '$$$#', '#$%#', '#$%#'),"8_":('#&###', '#$$$#', '#&###', '#$$$#', '#&###'),"9_":('#&###', '#$$$#', '#&###', '%$#', '#&###'),\
"0i":('+#', "%'%#", '$%%%$#', "$$'$$#", "$$'$$#", "$$'$$#", "$$'$$#", "$$'$$#", "$$'$$#", '$%%%$#', "%'%#", '+#'),"1i":('+#', '&%&#', '%&&#', '$%$$&#', "'$&#", "'$&#", "'$&#", "'$&#", "'$&#", "'$&#", '%($#', '+#'),"2i":('+#', "%'%#", '$%%%$#', "$$'$$#", ')$$#', '(%$#', "'%%#", '&%&#', "%%'#", '$%(#', '$)$#', '+#'),"3i":('+#', '$)$#', ')$$#', ')$$#', '(%$#', "%'%#", '(%$#', ')$$#', ')$$#', '$%%%$#', "%'%#", '+#'),"4i":('+#', "'%%#", '&&%#', '%%$$%#', '$%%$%#', '$$&$%#', '$$%%%#', '$)$#', '($%#', '($%#', '($%#', '+#'),"5i":('+#', '$)$#', '$$)#', '$$)#', '$$)#', '$(%#', '(%$#', ')$$#', ')$$#', '$%%%$#', "%'%#", '+#'),"6i":('+#', '%($#', '$%(#', '$$)#', '$$)#', '$(%#', '$$&%$#', "$$'$$#", "$$'$$#", '$%%%$#', "%'%#", '+#'),"7i":('+#', '$)$#', '(%$#', '($%#', "'%%#", "'$&#", '&%&#', "&$'#", "%%'#", '%$(#', '%$(#', '+#'),"8i":('+#', "%'%#", '$%%%$#', "$$'$$#", '$%%%$#', "%'%#", '$%%%$#', "$$'$$#", "$$'$$#", '$%%%$#', "%'%#", '+#'),"9i":('+#', "%'%#", '$%%%$#', "$$'$$#", "$$'$$#", '$%%%$#', '%($#', ')$$#', ')$$#', '(%$#', '$(%#', '+#')}


def cadre_carte(X,Y,clr,hauteur=49):
  for k in (0,1):
    fill_rect(X+1,Y+k*(1+hauteur),37,1,clr)
    fill_rect(X+38*k,Y+1,1,hauteur,clr)

def couleurs(carte): # couleur_nombre,couleur_tete,couleur_fond,couleur_tetes,couleur_nombres
  if carte==55:
    return ("y","r","purple","r","orange")
  elif carte%11==0:
    return ((50,255,100),"b","r","g","r")
  elif carte%10==0:
    return ("y","g",(50,255,100),(200,200,0),"g")
  elif carte%10==5:
    return ("cyan","b","cyan",(0,200,200),"b")
  else:
    return ((230,210,255),"purple","w",(160,130,235),"purple")

def dessin(nombre,taille,posX,posY,clr,decalage_chiffre=0,hauteur=49): # taille parmi "", "i", "_"
  for chiffre in range(len(str(nombre))):
    motif=images[str(nombre)[chiffre]+taille]
    #dec=-4*(carte>99)+4*(carte<10)
    for ligne in range(min(hauteur-25,len(motif))):
      elt=motif[ligne]
      rang=posX+decalage_chiffre*chiffre
      for pos in range(0,len(elt)-1,2):
        rang+=ord(elt[pos])-35
        fill_rect(rang,posY+ligne,ord(elt[pos+1])-35,1,clr)
        rang+=ord(elt[pos+1])-35

def dessinTete(taille,posX,posY,clrs,hauteur=49):
  motif=images[taille]
  #hauteur=(12+len(motif))*(taille=="moyenne")+H_reduite*(taille=="grande")
  for ligne in range(min(hauteur-12,len(motif))):
    elt=motif[ligne]
    rang=posX
    for pos in range(0,len(elt)-1,2):
      for p in (0,1):
        fill_rect(rang,posY+ligne,ord(elt[pos+p])-35,1,clrs[p])
        rang+=ord(elt[pos+p])-35

def minitete(x,y,clr,renversee=False):
  fill_rect(x,y,1,3,clr)
  fill_rect(x+1,y+1-2*renversee,2,3,clr)
  fill_rect(x+3,y,1,3,clr)


def position_minitetes(carte):
  if carte==55:
    return ((10,2),(15,2),(20,2),(25,2),(13,7),(18,7),(23,7))
  elif carte%11==0:
    return ((13,2),(18,2),(23,2),(16,7),(21,7))
  elif carte%10==0:
    return ((15,2),(20,2),(18,7))
  elif carte%10==5:
    return ((15,2),(20,2))
  else:
    return ((17,2),) # ne pas effacer la virgule solitaire


def IMG(carte,x,y,hauteur=49): # dessin d'une carte
  couleur_nombre,couleur_tete,couleur_fond,couleur_tetes,couleur_nombres=couleurs(carte)

  fill_rect(x+1,y+1,37,hauteur,"w") # on efface avant de dessiner la carte
  # cadre
  cadre_carte(x,y,"purple",hauteur)
  # petites têtes
  for (X,Y) in position_minitetes(carte):
    minitete(x+X,y+(carte%11!=0 and carte%10!=0)+Y,couleur_tetes)
    if hauteur==49:
      minitete(x+35-X,y-(carte%11!=0 and carte%10!=0)+48-Y,couleur_tetes,True) #renversee

  # petits numéros
  for chiffre in range(len(str(carte))):
    motif=images[str(carte)[chiffre]+"_"]
    dec=-4*(carte>99)+4*(carte<10)

    for ligne in range(len(motif)):
      elt=motif[ligne]
      rang=4*chiffre
      for pos in range(0,len(elt)-1,2):
        rang+=ord(elt[pos])-35
        for m in (0,1):
          fill_rect(x+2+m*(28+dec)+rang,y+3+ligne,ord(elt[pos+1])-35,1,couleur_nombres)
          if hauteur==49:
            fill_rect(x+79+28-m*(28+dec)-ord(elt[pos+1])-35-rang,y+43+4-ligne,ord(elt[pos+1])-35,1,couleur_nombres)
        rang+=ord(elt[pos+1])-35


  # grande tête
  dessinTete("grande",x+6,y+12,(couleur_fond,couleur_tete),hauteur)

  # grand numéro
  if hauteur>25:
    for k in (0,1):
      dessin(carte,"i"*k,x+10-4*(carte>99)+4*(carte<10),y+25,("purple",couleur_nombre)[k],8,hauteur)

def menu(Var):
  global NbTot,NbTotHum,Serie_complete,AffCartes
  chg=-1
  while not (keydown(KEY_EXE) or keydown(KEY_OK)):
    if chg:
      if Var=="NbTot":
        NbTot=(NbTot+chg-2)%9+2
        draw_string(" "+str(NbTot)+" ",145-5*(NbTot==10),50,"b")
        resultat=NbTot
      elif Var=="NbTotHum":
        NbTotHum=(NbTotHum+chg)%(NbTot+1)
        draw_string(" "+str(NbTotHum)+" ",145-5*(NbTotHum==10),100,"b")
        resultat=NbTotHum
      elif Var=="Serie_complete":
        Serie_complete=not Serie_complete
        draw_string(" "+(str(4+10*NbTot)+" ","104")[Serie_complete],175-5*Serie_complete,150,"b")
        resultat=Serie_complete
      elif Var=="AffCartes":
        AffCartes=not AffCartes
        draw_string(("non","oui")[AffCartes],145,200-50*(NbTot==10),"b")
        resultat=AffCartes
      sleep(0.2)
    chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT)
  while keydown(KEY_EXE) or keydown(KEY_OK):1
  return resultat

def XX(jr):
  return 10+260*(jr > (NbTot-1)//2)

def YY(jr):
  return 15+(H_reduite+12)*int(abs((NbTot+1)//2-jr-0.5))

def plus(X,Y,S): # croix rouge du +
  for m in (0,1):
    fill_rect(X+8-m+7+4*(S>9)+4*(S>99),Y+4+m,1+2*m,3-2*m,"r")

def ramasse():
  Cartes_recuperees[Ordre[i]]+=Piles[Choix_Pile] # on récupère la pile
  fill_rect(65+50*Choix_Pile,10,40,31+20*len(Piles[Choix_Pile]),"w") # on efface la pile
  #sleep(0.5)

  score=0
  for carte in Piles[Choix_Pile]:
    score += 1+1*(carte%10==5)+2*(carte%10==0)+4*(carte%11==0)+1*(carte==55)
  if score>0: # on affiche le score en rouge en petit
    plus(X,Y,scores[Ordre[i]])
    dessin(score,"_",X+17+2+4*(scores[Ordre[i]]>9)+4*(scores[Ordre[i]]>99),Y+3,"r",4)

    minitete(X+17+7+4*(scores[Ordre[i]]>9)+4*(scores[Ordre[i]]>99)+4*(score>9)+4*(score>99),Y+4,"r")
    scores[Ordre[i]]+=score

  Piles[Choix_Pile]=[Carte] # et à la place on y place la carte jouée

def afficherMain(joueur):
  for j in range(len(Mains[joueur])):
    IMG(Mains[joueur][j],5+min(45,270//max(1,len(Mains[joueur])-1))*j,165)
  JCadre(joueur,"g")

def JCadre(joueur,clr,seuil=8):
  draw_string("J"+str(joueur+1),X+9-5*(joueur==9),Y+H_reduite//2-7,clr)
  if NbTot>seuil:
    cadre_carte(X,Y,"purple",H_reduite) # cadre de hauteur réduite


Titres=("Les cartes","Le plateau","Le déroulement","Les points","Les modes","La vitesse")
Regles=(("Leur numéro, écrit en","grand, est rappelé","dans leurs coins.","","Leur valeur est le nombre de","têtes de taureau affichées","tout en haut de la carte : ","1, 2, 3, 5 ou 7 têtes."),\
("Les cartes sont placées par","ordre croissant sur 4 piles."," "*30,"Le score de la partie (vert),","de la manche (bleu) et du","tour (rouge)      est sur les","côtés pour chaque joueur.","","En bas : la main du joueur."),\
("Chaque manche dure 10 tours.","À chaque tour, chaque joueur","joue une de ses 10 cartes.","","Les cartes jouées sont placées","par ordre croissant sur les","4 piles du jeu sur une carte","de numéro inférieur mais le","plus proche possible."),\
("Un joueur ramasse la pile de","son choix si sa carte a un","numéro trop petit pour être","placé, ou la pile concernée", "si sa carte en est la 6ème","carte. 6 qui prend ! :D","","Le but est de ramasser le","minimum de têtes de taureau !","À 66 têtes, c'est fini !"),\
("Au lancement, on choisit le","nombre total de joueurs dont","le nombre de joueurs humains.","","Puis, on joue avec exactement","10×(Nombre total de joueurs)+4","cartes dont les numéros sont","consécutifs en partant de 1,","ou choisis entre 1 et 104."),\
("Avec 0 joueur humain, on  ","montre ou non la main des ","joueurs IA qui jouent.    ","","Un appui maintenu sur la","touche shift accélère le jeu.","","Un appui maintenu sur la","touche p met le jeu en pause."))

NbTot=4
# écran d'accueil
#fill_rect(0,0,320,222,"w")
draw_string("6 qui prend (cher) !",60,90,"g")
draw_string("Appuyer sur OK",90,120,"purple")
# affichage des cartes
for k in range(6):
  IMG((15,7,100,77,55,42)[k],10+130*(k%3),10+150*(k//3))

while not (keydown(KEY_EXE) or keydown(KEY_OK)):1
while keydown(KEY_EXE) or keydown(KEY_OK):1

fill_rect(0,0,320,222,"w")
page=1
chg=-1
draw_string("<"+" "*22+">",40,10,"b")
while not (keydown(KEY_EXE) or keydown(KEY_OK)):
  if chg:
    draw_string(Titres[page],160-5*len(Titres[page]),10,"w") # on efface le titre
    for ligne in range(len(Regles[page])): # on efface la page
      draw_string(Regles[page][ligne],15,40+18*ligne,"w")
    page=(page+chg)%6
    draw_string(Titres[page],160-5*len(Titres[page]),10,"g") # on affiche le nouveau titre
    for ligne in range(len(Regles[page])): # on affiche la nouvelle page
      draw_string(Regles[page][ligne],15,40+18*ligne,"purple")
    if page==0:
      IMG(42,245,40)
      for k in range(5):
        carte=(1,5,10,11,55)[k]
        for (X,Y) in position_minitetes(carte):
          minitete(30*k+20*(k==4)+X,185+(carte%11!=0 and carte%10!=0)+Y,couleurs(carte)[3])
    if page==1:
      for k in range(3):
        dessin((42,7,2)[k],"_",140+17*k+2,135+3,"gbr"[k],4)
        minitete(140+17*k+7+4*(k==0),135+4,"gbr"[k])
      plus(157,135,2)
    #if page==3:
    draw_string("66",260,202,"wr"[page==3])
    dessinTete("moyenne",283,204,("w","wr"[page==3]))
    sleep(0.3)
  chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT)
while keydown(KEY_EXE) or keydown(KEY_OK):1

while 1:
  fill_rect(0,0,320,222,"w")
  draw_string("6 qui prend (cher)",70,5,"g")
  draw_string("nombre total de joueurs",45,30,"purple")
  NbTot=5
  draw_string("<    >",130,50,"r")
  NbTot=menu("NbTot")

  draw_string("dont nombre de joueurs humains",10,80,"purple")
  NbTotHum=2
  draw_string("<    >",130,100,"r")
  NbTotHum=menu("NbTotHum")

  Serie_complete=True
  if NbTot < 10:
    draw_string("choix de la série de cartes",25,130,"purple")
    draw_string("< de 1 à     >",90,150,"r")
    Serie_complete=menu("Serie_complete")

  AffCartes=True
  if NbTotHum==0:
    draw_string("montre la main des joueurs",30,180-50*(NbTot==10),"purple")
    draw_string("<     >",125,200-50*(NbTot==10),"r")
    AffCartes=menu("AffCartes")
  H_reduite=min(49,(200-70*AffCartes)//((NbTot+1)//2)-10)

  # Début d'une partie
  scores_tot=[0 for k in range(NbTot)]
  scores=[0 for k in range(NbTot)]

  while max(scores_tot)<66:
    fill_rect(0,0,320,222,"w")
    Jeu=[k for k in range(1,104*Serie_complete+(4+10*NbTot)*(1-Serie_complete)+1)]
    Mains=[[] for k in range(NbTot)]
    for joueur in range(NbTot):
      for k in range(10):
        Mains[joueur].append(Jeu.pop(randint(0,len(Jeu)-1)))
      Mains[joueur]=sorted(Mains[joueur])

    Piles=[[] for k in range(4)]
    for k in range(4):
      Piles[k].append(Jeu.pop(randint(0,len(Jeu)-1)))
      IMG(Piles[k][-1],65+50*k,10)

    for k in range(NbTot):
      X=-2+XX(k)
      Y=-10+YY(k)
      dessin(scores_tot[k],"_",X+2-4*(scores_tot[k]>9),Y+3,"g",4)

      minitete(X+7,Y+4,"g")

    for i in range(NbTot):
      X=XX(i)
      Y=YY(i)#15+min(60,(135//((NbTot+1)//2)))*int(abs((NbTot+1)//2-i-0.5))
      fill_rect(X+1,Y+1,37,H_reduite,"w")
      JCadre(i,"b",0)
      # le joueur sera le joueur numéro 0
    # il faudra répéter 10 fois les instructions d'un tour de jeu
    Cartes_recuperees=[[] for k in range(NbTot)]

    for tour in range(10):
      Cartes_jouees=[0 for k in range(NbTot)]
      for j in range(NbTot): # on affiche le nombre de têtes pour chaque joueur
        X=10+XX(j)
        Y=-10+YY(j)
        fill_rect(X,Y+2,39,7,"w") # on efface le score bleu et la tête bleue de la partie en cours
        scores[j]=0
        for carte in Cartes_recuperees[j]:
          scores[j] += 1+1*(carte%10==5)+2*(carte%10==0)+4*(carte%11==0)+1*(carte==55)
        dessin(scores[j],"_",X+2,Y+3,"b",4) # on affiche le nouveau score bleu de la partie en cours

        minitete(X+7+4*(scores[j]>9)+4*(scores[j]>99),Y+4,"b")

      for joueur in range(NbTot):
        X=XX(joueur)
        Y=YY(joueur)
        #if NbTotHum==0 and AffCartes==True: # s'il n'y a aucun joueur humain et qu'on demande à afficher les cartes
          #afficherMain(joueur) # on affiche les cartes de la main et en vert le numéro du joueur
          #sleep(1*(1-keydown(KEY_SHIFT)))
          #while keydown(KEY_LEFTPARENTHESIS):1
          #fill_rect(0,165,320,52,"w") # on efface les cartes

        if joueur<NbTotHum:
          if NbTotHum>1:
            draw_string("appuyer sur OK pour montrer",25,150,"purple")
            draw_string("les cartes de J"+str(joueur+1),80,170,"purple")
            while not (keydown(KEY_EXE) or keydown(KEY_OK)):1
            while keydown(KEY_EXE) or keydown(KEY_OK):1
            draw_string("appuyer sur OK pour montrer",25,150,"w")
            draw_string("les cartes de J"+str(joueur+1),80,170,"w")
          afficherMain(joueur) # on affiche les cartes de la main et en vert le numéro du joueur
          #sleep(1)
          #choix de la carte à jouer
          choix=0
          chg=1
          pos=min(45,270//max(1,len(Mains[joueur])-1))
          while not (keydown(KEY_EXE) or keydown(KEY_OK)):
            if chg:
              #cadre(choix,"w")
              fill_rect(5+pos*choix,155,39,10,"w")
              IMG(Mains[joueur][choix],5+pos*choix,165) # on descend la précédente carte sélectionnée
              choix=(choix+chg)%(len(Mains[joueur]))
              IMG(Mains[joueur][choix],5+pos*choix,155) # on monte la nouvelle carte sélectionnée
              fill_rect(5+pos*choix,206,39,10,"w")
              sleep(0.3)
              #cadre(choix,"r")
            chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT)
          while keydown(KEY_EXE) or keydown(KEY_OK):1

          fill_rect(5+pos*choix,155,39,51,"w") #on efface la carte jouée
          sleep(0.5*(1-keydown(KEY_SHIFT)))
          while keydown(KEY_LEFTPARENTHESIS):1

          Cartes_jouees[joueur]=Mains[joueur].pop(choix)#randint(0,len(Mains[joueur])-1)) # à retirer

          fill_rect(0,165,320,52,"w") # on efface les cartes de la main
          if NbTotHum==1: # on réaffiche les cartes restantes
            afficherMain(joueur)
        #choix de la carte à jouer
        else:
          choix=randint(0,len(Mains[joueur])-1)

          if NbTotHum==0 and AffCartes==True:
            afficherMain(joueur)
            sleep(1*(1-keydown(KEY_SHIFT)))
            while keydown(KEY_LEFTPARENTHESIS):1
            pos=min(45,270//max(1,len(Mains[joueur])-1))
            IMG(Mains[joueur][choix],5+pos*choix,155) # on monte la nouvelle carte sélectionnée
            fill_rect(5+pos*choix,206,39,10,"w") # on efface le bas de la carte non montée
            sleep(1*(1-keydown(KEY_SHIFT)))
            while keydown(KEY_LEFTPARENTHESIS):1
            fill_rect(5+pos*choix,155,39,10,"w") # on efface le haut de la carte montée
            fill_rect(0,165,320,52,"w") # on efface les cartes

          Cartes_jouees[joueur]=Mains[joueur].pop(choix) # à modifier pour au moins éviter de jouer une carte qui suit immédiatement la dernière carte d'une pile de 5 cartes

        JCadre(joueur,"b") # on réaffiche en bleu le numéro du joueur

      sleep(1*(1-keydown(KEY_SHIFT)))
      while keydown(KEY_LEFTPARENTHESIS):1

      for i in range(NbTot): # on affiche les cartes jouées
        X=XX(i)
        Y=YY(i)
        IMG(Cartes_jouees[i],X,Y,H_reduite)
      sleep(1*(1-keydown(KEY_SHIFT)))
      while keydown(KEY_LEFTPARENTHESIS):1

      # on traite les cartes jouées dans l'ordre croissant
      Ordre=[Cartes_jouees.index(k) for k in sorted(Cartes_jouees)]

      for i in range(NbTot):
        X=10+XX(Ordre[i])
        Y=-10+YY(Ordre[i])
        Carte=Cartes_jouees[Ordre[i]] # on traite la carte à placer sur une pile
        if Carte < min([Piles[k][-1] for k in range(4)]):
          # la carte est trop petite et il va falloir choisir une pile à récupérer
          if Ordre[i]<NbTotHum: #choix de la pile à récupérer
            draw_string("choisir la pile à récupérer",25,145,"b")
            Choix_Pile=1
            chg=-1
            while not (keydown(KEY_EXE) or keydown(KEY_OK)):
              if chg:
                draw_string("^",65+15+50*Choix_Pile,124,"w")
                Choix_Pile=(Choix_Pile+chg)%4
                draw_string("^",65+15+50*Choix_Pile,124,"r")
                sleep(0.3)
              chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT)
            while keydown(KEY_EXE) or keydown(KEY_OK):1
            draw_string("choisir la pile à récupérer",25,145,"w")
            draw_string("^",65+15+50*Choix_Pile,124,"w")
          else:
            Tetes=[sum(1+1*(Piles[N][c]%10==5)+2*(Piles[N][c]%10==0)+4*(Piles[N][c]%11==0)+1*(Piles[N][c]==55) for c in range(len(Piles[N]))) for N in range(4)] # penalités des 4 piles
            Choix_Pile=Tetes.index(min(Tetes)) # on détermine la pile qui a le moins de têtes

          ramasse()
        else:
          differences=[Carte-Piles[k][-1]+200*(Carte<Piles[k][-1]) for k in range(4)] # le +200 permet d'exclure les piles qui contiennent des cartes trop grandes
          Choix_Pile=differences.index(min(differences))
          if len(Piles[Choix_Pile]) == 5: # si la pile choisie contient 5 cartes
            ramasse()
          else:
            Piles[Choix_Pile].append(Carte) # si la pile contient moins de 5 cartes, alors on y ajoute la carte jouée
        sleep(0.5*(1-keydown(KEY_SHIFT)))
        while keydown(KEY_LEFTPARENTHESIS):1

        X=XX(Ordre[i])
        Y=YY(Ordre[i])
        fill_rect(X+1,Y+1,37,H_reduite,"w") # on efface la carte jouée
        JCadre(Ordre[i],"bw"[tour==9])
        IMG(Piles[Choix_Pile][-1],65+50*Choix_Pile,-5+15*len(Piles[Choix_Pile])) # on affiche la nouvelle carte posée sur une pile
        sleep(1*(1-keydown(KEY_SHIFT)))
        while keydown(KEY_LEFTPARENTHESIS):1


    # calcul des scores
    for joueur in range(NbTot):
      scores_tot[joueur]+=scores[joueur]

    # affichage des scores
    for joueur in range(NbTot):
      X=XX(joueur)
      Y=YY(joueur)
      clr=(("b","r")[scores_tot[joueur]==max(scores_tot)],"g")[scores_tot[joueur]==min(scores_tot)]
      if NbTot<7 or not AffCartes:
        draw_string("J"+str(joueur+1),X+9-5*(joueur==9),Y+(H_reduite-30)//3,clr)
      D=H_reduite//2-1-7*(NbTot>6)*AffCartes
      draw_string(str(scores_tot[joueur]),X+6-5*(scores_tot[joueur]>9)-10*(scores_tot[joueur]>99),Y+D,clr)
      cadre_carte(X,Y,"purple",H_reduite)
      dessinTete("moyenne",X+16+6,Y+2+D,("w",clr))

    if max(scores_tot)>=66:
      draw_string("Fin de la partie,",80,130,"b")
      draw_string("J"+str(scores_tot.index(min(scores_tot))+1)+" a gagné.",105,150,"b")
      draw_string("OK pour relancer",80,170,"purple")
      draw_string("une partie",110,190,"purple")
    else:
      draw_string("OK pour relancer",80,140,"b")
      draw_string("une manche",110,160,"b")
    while not (keydown(KEY_EXE) or keydown(KEY_OK)):1
    while keydown(KEY_EXE) or keydown(KEY_OK):1

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.