Advertisement
csmine

TP Pickomino FINI

Jun 19th, 2019
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 14.96 KB | None | 0 0
  1. from math import *
  2. from random import *
  3. from time import *
  4.  
  5. class Jeu:
  6.    
  7.     def __init__(self):
  8.         self.ListeNomsJoueurs=[]
  9.        
  10.         self.ListeFichiersIA=[]
  11.        
  12.         self.ListePickosAuCentre=[]
  13.        
  14.         self.QuiJoue=0
  15.        
  16.         self.ListeDesGardes=[]
  17.      
  18.         self.ListeDesNouveauLancer=[]
  19.        
  20.         self.ListePickosJoueurs=[]
  21.        
  22.     def __repr__(self):
  23.         deux=""
  24.         for i in range(0,len(self.ListeNomsJoueurs)):
  25.             joueur=self.ListeNomsJoueurs[i]
  26.             deux+=str(joueur)
  27.             if self.ListeFichiersIA[i]:
  28.                 deux+=" (BOT)"
  29.             else:
  30.                 deux+=""
  31.             deux+="'s pickos :"+str(self.ListePickosJoueurs[i])+"\n"
  32.        
  33.         trois="Pickos au centre : "+str(self.ListePickosAuCentre)+"\n"
  34.        
  35.         quatre="Qui joue : "+str(self.QuiJoue)+"\n"
  36.         trois2="Dés gardés:"+str(self.ListeDesGardes)+"\n"
  37.         trois3="Dés lancés:"+str(self.ListeDesNouveauLancer)
  38.         return(deux+trois+quatre+trois2+trois3)
  39.        
  40.        
  41.        
  42.     def NouveauJoueur(self,joueur,bot=False):
  43.         (self.ListeNomsJoueurs).append(joueur)
  44.        
  45.         self.ListePickosJoueurs.append([])
  46.         self.ListeDesGardes.append([])
  47.         self.ListeDesNouveauLancer.append([])
  48.        
  49.        
  50.         if bot==False:
  51.             (self.ListeFichiersIA).append(bot)
  52.         else:
  53.             (self.ListeFichiersIA).append(True)
  54.        
  55.     def Initialisation(self):
  56.         self.ListePickosAuCentre=[i for i in range(21,37)]
  57.    
  58.         self.QuiJoue=randint(0,len(self.ListeNomsJoueurs)-1)
  59.        
  60.         for i in range(0,len(self.ListeNomsJoueurs)):
  61.             self.ListeDesGardes[i]=[]
  62.             self.ListeDesNouveauLancer[i]=[]
  63.        
  64.     def JoueurSuivant(self):
  65.         for i in range(0,len(self.ListeNomsJoueurs)):
  66.             self.ListeDesGardes[i]=[]
  67.             self.ListeDesNouveauLancer[i]=[]
  68.         if self.QuiJoue==len(self.ListeNomsJoueurs)-1:
  69.             self.QuiJoue=0
  70.         else:
  71.             self.QuiJoue+=1
  72.        
  73.     def LancerLesDes(self):
  74.         i=self.QuiJoue
  75.        
  76.         self.ListeDesNouveauLancer[i]=[]
  77.        
  78.         nombre_a_lancer=8-len(self.ListeDesGardes[i])
  79.         for k in range(0,nombre_a_lancer):
  80.             r=randint(1,6)
  81.             self.ListeDesNouveauLancer[i].append(int(r))
  82.        
  83.     def EstCeQueTourTermine(self):
  84.         i=self.QuiJoue
  85.        
  86.         if len(self.ListeDesGardes[i])==8:
  87.             return(True)
  88.        
  89.         else:
  90.             L_nouv=self.ListeDesNouveauLancer[i]
  91.             L_gard=self.ListeDesGardes[i]
  92.             for k in range(0,len(L_nouv)):
  93.                 if L_nouv[k] not in L_gard:
  94.                     return(False)
  95.             return(True)
  96.    
  97.     def GarderLesDes(self,valeur):
  98.         i=self.QuiJoue
  99.         if valeur not in self.ListeDesNouveauLancer[i]:
  100.             print("La valeur n'est pas dans les dés.")
  101.             return(False)
  102.         elif valeur in self.ListeDesGardes[i]:
  103.             print("Vous avez déjà cette face en main !")
  104.             return(False)
  105.         else:
  106.             compteur=0
  107.             for face in self.ListeDesNouveauLancer[i]:
  108.                 if face==valeur:
  109.                     compteur+=1
  110.                     self.ListeDesGardes[i].append(valeur)
  111.             for k in range(0,compteur):
  112.                 self.ListeDesNouveauLancer[i].remove(valeur)
  113.             return(True)
  114.    
  115.     def Points(self):
  116.         i=self.QuiJoue
  117.         compteur=0
  118.        
  119.         for face in self.ListeDesGardes[i]:
  120.             if face!=6:
  121.                 compteur+=face
  122.             else:
  123.                 compteur+=5
  124.         return(compteur)
  125.            
  126.     def PeutPrendrePicko(self):
  127.         i=self.QuiJoue
  128.         points=self.Points()
  129.        
  130.         if self.ListePickosAuCentre[0] <= points:
  131.             return(True)
  132.         else:
  133.             for k in range(0,len(self.ListePickosJoueurs)):
  134.                 liste_pickos=self.ListePickosJoueurs[k]
  135.                 if liste_pickos!=[] and k!=i :
  136.                     if points==liste_pickos[-1]:
  137.                         return(True)
  138.             return(False)
  139.    
  140.     def PrendPicko(self):
  141.         i=self.QuiJoue
  142.         points=self.Points()
  143.        
  144.         if self.PeutPrendrePicko():
  145.             for k in range(0,len(self.ListePickosJoueurs)):
  146.                 liste_pickos=self.ListePickosJoueurs[k]
  147.                 if liste_pickos!=[] and k!=i :
  148.                     if points==liste_pickos[-1]:
  149.                         liste_pickos.remove(points)
  150.                         self.ListePickosJoueurs[i].append(points)
  151.                         return(True)
  152.            
  153.             for k in range(len(self.ListePickosAuCentre)-1,-1,-1):
  154.                 pickos=self.ListePickosAuCentre[k]
  155.                 if points>=pickos:
  156.                     self.ListePickosAuCentre.remove(pickos)
  157.                     self.ListePickosJoueurs[i].append(pickos)
  158.                     return(True)
  159.                    
  160.         else:
  161.             print("Vous ne pouvez pas prendre un picko !")
  162.             return(False)
  163.            
  164.        
  165.     def PerdPicko(self):
  166.         i=self.QuiJoue
  167.         Liste_Du_Joueur=self.ListePickosJoueurs[i]
  168.         if Liste_Du_Joueur!=[]:
  169.             picko_perdu=Liste_Du_Joueur[-1]
  170.             Liste_Du_Joueur.remove(picko_perdu)
  171.             self.ListePickosAuCentre.append(picko_perdu)
  172.             self.ListePickosAuCentre.sort()
  173.             self.ListePickosAuCentre.remove(self.ListePickosAuCentre[-1])
  174.             print("Vous avez perdu le picko ",picko_perdu)
  175.             return(True)
  176.         else:
  177.             print("Vous ne pouvez pas perdre de picko, vous êtes déjà pauvre")
  178.             return(False)
  179.    
  180.     def Memo(self,string):
  181.         fichier = open("memo.txt","a")
  182.         fichier.write("\n"+string)
  183.         fichier.close()
  184.        
  185.     def JoueUnTour(self):
  186.         i=self.QuiJoue
  187.        
  188.        
  189.         print("C'est au tour de ",self.ListeNomsJoueurs[i],"!")
  190.         # Tour de l'IA ?
  191.         if self.ListeFichiersIA[i]:
  192.            
  193.             relancer=True
  194.             self.LancerLesDes()
  195.             PickosJoueurs=self.ListePickosJoueurs[i]
  196.             if PickosJoueurs==[]:
  197.                 OldPicko=0
  198.             else:
  199.                 OldPicko=PickosJoueurs[-1]
  200.             while relancer:
  201.                 self.LancerLesDes()
  202.                
  203.                 print("Votre jeté de dé : ",self.ListeDesNouveauLancer[i])
  204.                
  205.                 if not (self.EstCeQueTourTermine()):
  206.                     choix_de=MonIA("choix_de",self.ListeDesGardes,self.ListeDesNouveauLancer,self.ListePickosAuCentre,self.ListePickosJoueurs,self.QuiJoue,self.PeutPrendrePicko())
  207.                     while not (self.GarderLesDes(choix_de)):
  208.                         if self.EstCeQueTourTermine():
  209.                             break
  210.                         print(self.ListeNomsJoueurs[i],"ne peut pas garder le dé ",choix_de)
  211.                         choix_de=MonIA("choix_de",self.ListeDesGardes,self.ListeDesNouveauLancer,self.ListePickosAuCentre,self.ListePickosJoueurs,self.QuiJoue,self.PeutPrendrePicko())
  212.                    
  213.                     print(self.ListeNomsJoueurs[i],"a gardé le dé ",choix_de,"\n")
  214.                    
  215.                     print("Vous avez ",self.Points()," points")
  216.                     choix_relance=MonIA("Relancer",self.ListeDesGardes,self.ListeDesNouveauLancer,self.ListePickosAuCentre,self.ListePickosJoueurs,self.QuiJoue,self.PeutPrendrePicko())
  217.                     if choix_relance=="y":
  218.                         relancer=True
  219.                         print("Vous relancez")
  220.                     else:
  221.                         relancer=False
  222.                         print("Vous ne relancez plus")
  223.                     if relancer==False:
  224.                         if self.PeutPrendrePicko() and 6 in self.ListeDesGardes[i]:
  225.                             print("Vous pouvez prendre un picko !")
  226.                            
  227.                             self.PrendPicko()
  228.                             print("Vous avez pris le picko ",self.ListePickosJoueurs[i][-1])
  229.                         else:
  230.                             break
  231.                 else:
  232.                     print("Vous ne pouvez plus rien prendre.")
  233.                     break
  234.             print("Votre tour est terminé.")
  235.             if relancer==True and self.PeutPrendrePicko() and 6 in self.ListeDesGardes[i]:
  236.                         print("Vous pouvez prendre un picko !")
  237.                         self.PrendPicko()
  238.                         print("Vous avez pris le picko ",self.ListePickosJoueurs[i][-1])
  239.             elif self.ListePickosJoueurs[i] != [] and OldPicko==self.ListePickosJoueurs[i][-1]:
  240.                 self.PerdPicko()
  241.             print("Au joueur suivant !","\n")
  242.             self.JoueurSuivant()
  243.            
  244.            
  245.         else:
  246.             relancer=True
  247.             self.LancerLesDes()
  248.             PickosJoueurs=self.ListePickosJoueurs[i]
  249.             if PickosJoueurs==[]:
  250.                 OldPicko=0
  251.             else:
  252.                 OldPicko=PickosJoueurs[-1]
  253.             while relancer:
  254.                 self.LancerLesDes()
  255.                
  256.                 print("Votre jeté de dé : ",self.ListeDesNouveauLancer[i])
  257.                
  258.                
  259.                 if not (self.EstCeQueTourTermine()):
  260.                     print("Les dés que vous avez déjà gardés sont : ",self.ListeDesGardes[i])
  261.                     choix_de=int(input("Entrez le numéro du dé à garder \n> "))
  262.                    
  263.                     while not (self.GarderLesDes(choix_de)):
  264.                         if self.EstCeQueTourTermine():
  265.                             break
  266.                         print(self.ListeNomsJoueurs[i],"ne peut pas garder le dé ",choix_de)
  267.                         print("Les dés que vous avez déjà gardés sont : ",self.ListeDesGardes[i])
  268.                         choix_de=int(input("Entrez le numéro du dé à garder \n> "))
  269.                    
  270.                     print(self.ListeNomsJoueurs[i],"a gardé le dé ",choix_de,"\n")
  271.                    
  272.                     print("Vous avez ",self.Points()," points")
  273.                     choix_relance=str(input("Voulez-vous relancer ? (y/n) \n> "))
  274.                     if choix_relance=="y":
  275.                         relancer=True
  276.                     else:
  277.                         relancer=False
  278.                     if relancer==False:
  279.                         if self.PeutPrendrePicko() and 6 in self.ListeDesGardes[i]:
  280.                             print("Vous pouvez prendre un picko !")
  281.                             self.PrendPicko()
  282.                             print("Vous avez pris le picko ",self.ListePickosJoueurs[i][-1])
  283.                         else:
  284.                             break
  285.                 else:
  286.                     print("Vous ne pouvez plus rien prendre.")
  287.                     break
  288.             print("Votre tour est terminé.")
  289.             if self.PeutPrendrePicko() and 6 in self.ListeDesGardes[i] and relancer==True:
  290.                         print("Vous pouvez prendre un picko !")
  291.                         self.PrendPicko()
  292.                         print("Vous avez pris le picko ",self.ListePickosJoueurs[i][-1])
  293.             elif self.ListePickosJoueurs[i] == [] or OldPicko==self.ListePickosJoueurs[i][-1]:
  294.                 self.PerdPicko()
  295.             inutile=input("\nAppuyez sur ENTER pour continuer.")
  296.             print("\nAu joueur suivant !\n")
  297.             sleep(1)
  298.             self.JoueurSuivant()
  299.            
  300.     def JoueUnePartie(self):
  301.         global gagnant
  302.        
  303.         while self.ListePickosAuCentre != []:
  304.             self.JoueUnTour()
  305.             print("\n-----------------------------------------\n\n")
  306.        
  307.         print("La partie est terminée !")
  308.        
  309.         deux=""
  310.         Liste_Points=[]
  311.         for i in range(0,len(self.ListeNomsJoueurs)):
  312.             pickos_dun_joueur=(self.ListePickosJoueurs[i])
  313.             pickos_dun_joueur.sort()
  314.             joueur=self.ListeNomsJoueurs[i]
  315.             deux+=str(joueur)
  316.             if self.ListeFichiersIA[i]:
  317.                 deux+=" (BOT)"
  318.             else:
  319.                 deux+=""
  320.             deux+="'s pickos :"+str(pickos_dun_joueur)+"\n"
  321.            
  322.             a=0
  323.             for picko in self.ListePickosJoueurs[i]:
  324.                 a+=picko
  325.             deux+="points totaux : "+str(a)+"\n"
  326.             Liste_Points.append(a)
  327.            
  328.         print(deux)
  329.        
  330.         Liste_Premiers=[]
  331.         for i in range(0,len(self.ListeNomsJoueurs)):
  332.            
  333.             maximum = max(Liste_Points)
  334.            
  335.             if Liste_Points[i]==maximum:
  336.                 Liste_Premiers.append(i)
  337.        
  338.         maximum=0
  339.         for k in Liste_Premiers:
  340.             if max(self.ListePickosJoueurs[k])>maximum:
  341.                 premier=k
  342.        
  343.         print("Le joueur qui a gagné est : ",self.ListeNomsJoueurs[premier])
  344.        
  345.        
  346.         gagnant= self.ListeNomsJoueurs[premier]
  347.        
  348.        
  349.        
  350. def MonIA(Type,DesGardes,DesLances,PickosAuCentre,PickosJoueurs,Num,PeutPrendre):
  351.     if Type=="Relancer":
  352.         r=randint(0,1)
  353.         if PeutPrendre:
  354.             return("n")
  355.         else:
  356.             return("y")
  357.     else:
  358.         if 6 in DesLances[Num] and 6 not in DesGardes[Num]:
  359.             return(6)
  360.         r=randint(0,len(DesLances[Num])-1)
  361.         while DesLances[Num][r] in DesGardes[Num]:
  362.             r=randint(0,len(DesLances[Num])-1)
  363.         return(DesLances[Num][r])
  364.        
  365.        
  366. # Ecris "PartyBots()" pour jouer une partie ! Enlève les True pour mettre de vrais joueurs.
  367. def PartyBots(n=1,k=0):
  368.     global Dictionnaire
  369.    
  370.     if k==0:
  371.         Dictionnaire = {"Arnold":0,"Gégé":0,"Jostophe":0,"Marize":0,"Jean-Emmanuel":0,"René":0,"Henry":0,"Minihenry":0,"Nathan":0,}
  372.    
  373.     if k<n:
  374.         MonJeu=Jeu()
  375.         MonJeu.NouveauJoueur("Arnold",True)
  376.         MonJeu.NouveauJoueur("Gégé",True)
  377.         MonJeu.NouveauJoueur("Jostophe",True)
  378.         MonJeu.NouveauJoueur("Marize",True)
  379.         MonJeu.NouveauJoueur("Jean-Emmanuel",True)
  380.         MonJeu.NouveauJoueur("René",True)
  381.         MonJeu.NouveauJoueur("Henry",True)
  382.         MonJeu.NouveauJoueur("Minihenry",True)
  383.         MonJeu.NouveauJoueur("Nathan",True)
  384.  
  385.        
  386.         MonJeu.Initialisation()
  387.         MonJeu.JoueUnePartie()
  388.        
  389.         Dictionnaire[gagnant]+=1
  390.        
  391.         PartieBots(n,k+1)
  392.    
  393.    
  394.     if n!=1:
  395.         return(Dictionnaire)
  396.    
  397.    
  398.    
  399. """
  400.  
  401. MonJeu=Jeu();MonJeu.NouveauJoueur("Arnold",True);MonJeu.NouveauJoueur("Gégé",True);MonJeu.NouveauJoueur("Jostophe",True);MonJeu.NouveauJoueur("Marize",True);MonJeu.NouveauJoueur("Jean-Emmanuel",True);MonJeu.Initialisation();MonJeu.JoueUnePartie()
  402.  
  403.  
  404. MonJeu=Jeu();MonJeu.NouveauJoueur("Arnold");MonJeu.NouveauJoueur("Gégé");MonJeu.NouveauJoueur("Jostophe");MonJeu.Initialisation();MonJeu.JoueUnePartie()
  405. """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement