from math import * from random import * from time import * class Jeu: def __init__(self): self.ListeNomsJoueurs=[] self.ListeFichiersIA=[] self.ListePickosAuCentre=[] self.QuiJoue=0 self.ListeDesGardes=[] self.ListeDesNouveauLancer=[] self.ListePickosJoueurs=[] def __repr__(self): deux="" for i in range(0,len(self.ListeNomsJoueurs)): joueur=self.ListeNomsJoueurs[i] deux+=str(joueur) if self.ListeFichiersIA[i]: deux+=" (BOT)" else: deux+="" deux+="'s pickos :"+str(self.ListePickosJoueurs[i])+"\n" trois="Pickos au centre : "+str(self.ListePickosAuCentre)+"\n" quatre="Qui joue : "+str(self.QuiJoue)+"\n" trois2="Dés gardés:"+str(self.ListeDesGardes)+"\n" trois3="Dés lancés:"+str(self.ListeDesNouveauLancer) return(deux+trois+quatre+trois2+trois3) def NouveauJoueur(self,joueur,bot=False): (self.ListeNomsJoueurs).append(joueur) self.ListePickosJoueurs.append([]) self.ListeDesGardes.append([]) self.ListeDesNouveauLancer.append([]) if bot==False: (self.ListeFichiersIA).append(bot) else: (self.ListeFichiersIA).append(True) def Initialisation(self): self.ListePickosAuCentre=[i for i in range(21,37)] self.QuiJoue=randint(0,len(self.ListeNomsJoueurs)-1) for i in range(0,len(self.ListeNomsJoueurs)): self.ListeDesGardes[i]=[] self.ListeDesNouveauLancer[i]=[] def JoueurSuivant(self): for i in range(0,len(self.ListeNomsJoueurs)): self.ListeDesGardes[i]=[] self.ListeDesNouveauLancer[i]=[] if self.QuiJoue==len(self.ListeNomsJoueurs)-1: self.QuiJoue=0 else: self.QuiJoue+=1 def LancerLesDes(self): i=self.QuiJoue self.ListeDesNouveauLancer[i]=[] nombre_a_lancer=8-len(self.ListeDesGardes[i]) for k in range(0,nombre_a_lancer): r=randint(1,6) self.ListeDesNouveauLancer[i].append(int(r)) def EstCeQueTourTermine(self): i=self.QuiJoue if len(self.ListeDesGardes[i])==8: return(True) else: L_nouv=self.ListeDesNouveauLancer[i] L_gard=self.ListeDesGardes[i] for k in range(0,len(L_nouv)): if L_nouv[k] not in L_gard: return(False) return(True) def GarderLesDes(self,valeur): i=self.QuiJoue if valeur not in self.ListeDesNouveauLancer[i]: print("La valeur n'est pas dans les dés.") return(False) elif valeur in self.ListeDesGardes[i]: print("Vous avez déjà cette face en main !") return(False) else: compteur=0 for face in self.ListeDesNouveauLancer[i]: if face==valeur: compteur+=1 self.ListeDesGardes[i].append(valeur) for k in range(0,compteur): self.ListeDesNouveauLancer[i].remove(valeur) return(True) def Points(self): i=self.QuiJoue compteur=0 for face in self.ListeDesGardes[i]: if face!=6: compteur+=face else: compteur+=5 return(compteur) def PeutPrendrePicko(self): i=self.QuiJoue points=self.Points() if self.ListePickosAuCentre[0] <= points: return(True) else: for k in range(0,len(self.ListePickosJoueurs)): liste_pickos=self.ListePickosJoueurs[k] if liste_pickos!=[] and k!=i : if points==liste_pickos[-1]: return(True) return(False) def PrendPicko(self): i=self.QuiJoue points=self.Points() if self.PeutPrendrePicko(): for k in range(0,len(self.ListePickosJoueurs)): liste_pickos=self.ListePickosJoueurs[k] if liste_pickos!=[] and k!=i : if points==liste_pickos[-1]: liste_pickos.remove(points) self.ListePickosJoueurs[i].append(points) return(True) for k in range(len(self.ListePickosAuCentre)-1,-1,-1): pickos=self.ListePickosAuCentre[k] if points>=pickos: self.ListePickosAuCentre.remove(pickos) self.ListePickosJoueurs[i].append(pickos) return(True) else: print("Vous ne pouvez pas prendre un picko !") return(False) def PerdPicko(self): i=self.QuiJoue Liste_Du_Joueur=self.ListePickosJoueurs[i] if Liste_Du_Joueur!=[]: picko_perdu=Liste_Du_Joueur[-1] Liste_Du_Joueur.remove(picko_perdu) self.ListePickosAuCentre.append(picko_perdu) self.ListePickosAuCentre.sort() self.ListePickosAuCentre.remove(self.ListePickosAuCentre[-1]) print("Vous avez perdu le picko ",picko_perdu) return(True) else: print("Vous ne pouvez pas perdre de picko, vous êtes déjà pauvre") return(False) def Memo(self,string): fichier = open("memo.txt","a") fichier.write("\n"+string) fichier.close() def JoueUnTour(self): i=self.QuiJoue print("C'est au tour de ",self.ListeNomsJoueurs[i],"!") # Tour de l'IA ? if self.ListeFichiersIA[i]: relancer=True self.LancerLesDes() PickosJoueurs=self.ListePickosJoueurs[i] if PickosJoueurs==[]: OldPicko=0 else: OldPicko=PickosJoueurs[-1] while relancer: self.LancerLesDes() print("Votre jeté de dé : ",self.ListeDesNouveauLancer[i]) if not (self.EstCeQueTourTermine()): choix_de=MonIA("choix_de",self.ListeDesGardes,self.ListeDesNouveauLancer,self.ListePickosAuCentre,self.ListePickosJoueurs,self.QuiJoue,self.PeutPrendrePicko()) while not (self.GarderLesDes(choix_de)): if self.EstCeQueTourTermine(): break print(self.ListeNomsJoueurs[i],"ne peut pas garder le dé ",choix_de) choix_de=MonIA("choix_de",self.ListeDesGardes,self.ListeDesNouveauLancer,self.ListePickosAuCentre,self.ListePickosJoueurs,self.QuiJoue,self.PeutPrendrePicko()) print(self.ListeNomsJoueurs[i],"a gardé le dé ",choix_de,"\n") print("Vous avez ",self.Points()," points") choix_relance=MonIA("Relancer",self.ListeDesGardes,self.ListeDesNouveauLancer,self.ListePickosAuCentre,self.ListePickosJoueurs,self.QuiJoue,self.PeutPrendrePicko()) if choix_relance=="y": relancer=True print("Vous relancez") else: relancer=False print("Vous ne relancez plus") if relancer==False: if self.PeutPrendrePicko() and 6 in self.ListeDesGardes[i]: print("Vous pouvez prendre un picko !") self.PrendPicko() print("Vous avez pris le picko ",self.ListePickosJoueurs[i][-1]) else: break else: print("Vous ne pouvez plus rien prendre.") break print("Votre tour est terminé.") if relancer==True and self.PeutPrendrePicko() and 6 in self.ListeDesGardes[i]: print("Vous pouvez prendre un picko !") self.PrendPicko() print("Vous avez pris le picko ",self.ListePickosJoueurs[i][-1]) elif self.ListePickosJoueurs[i] != [] and OldPicko==self.ListePickosJoueurs[i][-1]: self.PerdPicko() print("Au joueur suivant !","\n") self.JoueurSuivant() else: relancer=True self.LancerLesDes() PickosJoueurs=self.ListePickosJoueurs[i] if PickosJoueurs==[]: OldPicko=0 else: OldPicko=PickosJoueurs[-1] while relancer: self.LancerLesDes() print("Votre jeté de dé : ",self.ListeDesNouveauLancer[i]) if not (self.EstCeQueTourTermine()): print("Les dés que vous avez déjà gardés sont : ",self.ListeDesGardes[i]) choix_de=int(input("Entrez le numéro du dé à garder \n> ")) while not (self.GarderLesDes(choix_de)): if self.EstCeQueTourTermine(): break print(self.ListeNomsJoueurs[i],"ne peut pas garder le dé ",choix_de) print("Les dés que vous avez déjà gardés sont : ",self.ListeDesGardes[i]) choix_de=int(input("Entrez le numéro du dé à garder \n> ")) print(self.ListeNomsJoueurs[i],"a gardé le dé ",choix_de,"\n") print("Vous avez ",self.Points()," points") choix_relance=str(input("Voulez-vous relancer ? (y/n) \n> ")) if choix_relance=="y": relancer=True else: relancer=False if relancer==False: if self.PeutPrendrePicko() and 6 in self.ListeDesGardes[i]: print("Vous pouvez prendre un picko !") self.PrendPicko() print("Vous avez pris le picko ",self.ListePickosJoueurs[i][-1]) else: break else: print("Vous ne pouvez plus rien prendre.") break print("Votre tour est terminé.") if self.PeutPrendrePicko() and 6 in self.ListeDesGardes[i] and relancer==True: print("Vous pouvez prendre un picko !") self.PrendPicko() print("Vous avez pris le picko ",self.ListePickosJoueurs[i][-1]) elif self.ListePickosJoueurs[i] == [] or OldPicko==self.ListePickosJoueurs[i][-1]: self.PerdPicko() inutile=input("\nAppuyez sur ENTER pour continuer.") print("\nAu joueur suivant !\n") sleep(1) self.JoueurSuivant() def JoueUnePartie(self): global gagnant while self.ListePickosAuCentre != []: self.JoueUnTour() print("\n-----------------------------------------\n\n") print("La partie est terminée !") deux="" Liste_Points=[] for i in range(0,len(self.ListeNomsJoueurs)): pickos_dun_joueur=(self.ListePickosJoueurs[i]) pickos_dun_joueur.sort() joueur=self.ListeNomsJoueurs[i] deux+=str(joueur) if self.ListeFichiersIA[i]: deux+=" (BOT)" else: deux+="" deux+="'s pickos :"+str(pickos_dun_joueur)+"\n" a=0 for picko in self.ListePickosJoueurs[i]: a+=picko deux+="points totaux : "+str(a)+"\n" Liste_Points.append(a) print(deux) Liste_Premiers=[] for i in range(0,len(self.ListeNomsJoueurs)): maximum = max(Liste_Points) if Liste_Points[i]==maximum: Liste_Premiers.append(i) maximum=0 for k in Liste_Premiers: if max(self.ListePickosJoueurs[k])>maximum: premier=k print("Le joueur qui a gagné est : ",self.ListeNomsJoueurs[premier]) gagnant= self.ListeNomsJoueurs[premier] def MonIA(Type,DesGardes,DesLances,PickosAuCentre,PickosJoueurs,Num,PeutPrendre): if Type=="Relancer": r=randint(0,1) if PeutPrendre: return("n") else: return("y") else: if 6 in DesLances[Num] and 6 not in DesGardes[Num]: return(6) r=randint(0,len(DesLances[Num])-1) while DesLances[Num][r] in DesGardes[Num]: r=randint(0,len(DesLances[Num])-1) return(DesLances[Num][r]) # Ecris "PartyBots()" pour jouer une partie ! Enlève les True pour mettre de vrais joueurs. def PartyBots(n=1,k=0): global Dictionnaire if k==0: Dictionnaire = {"Arnold":0,"Gégé":0,"Jostophe":0,"Marize":0,"Jean-Emmanuel":0,"René":0,"Henry":0,"Minihenry":0,"Nathan":0,} if k