def p2_appel_et_chien(self,joueurs,dog): joueurs[self.appelant].appel_roi() self.roi_appele=joueurs[self.appelant].roi_appele roi=self.roi_appele if (carte(roi,"roi") in dog) or (carte(roi,"roi") in joueurs[self.appelant].main): self.appele=self.appelant else: for i in xrange(1,5): if carte(roi,"roi") in joueurs[(self.appelant + i)%5].main: self.appele=(self.appelant + i)%5 joueurs[self.appele].attaquant=True if self.annonce == "garde contre": i=0 while i < 5 and (i != self.appelant) and ( i!=self.appele): # A TESTER : verifier que le booleen 0 != None marche comme on veut i+=1 joueurs[i].tas.extend(dog) #on a trouve un joueur de l'equipe defenseurs else: if self.annonce=="garde sans": joueurs[self.appelant].tas.extend(dog) else: joueurs[self.appelant].main.extend(dog) joueurs[self.appelant].tri_main() joueurs[self.appelant].fait_son_chien() if (self.annonce=="garde" or self.annonce=="petite") and (carte(self.roi_appele,"roi") in dog): self.appele_connu=True
def joue_un_tour(self,joueurs): self.pli=[] for i in xrange(0,5): j=(self.maitre+i)%5 #if joueurs[j].type !="humain": #print "\n Au joueur %s de choisir une carte. \n" %(joueurs[j].nom) if joueurs[j].type !="joueur_intelligent": joueurs[j].joue_une_carte(self.pli) else: if self.tour >=18: # <============================================ ICI POUR MODULER LE DECLENCHEMENT DE L'IA PREVISION_TOTALE, SI >=16 ON NE LA DECLENCHE PAS joueurs[j].joue_prevision_totale(self) else: joueurs[j].joue_coup_par_coup(self) self.observe(j) if self.pli[len(self.pli)-1].couleur=="excuse": # Traitement particulier de l'excuse, partie 1 self.joueurs[j].tas.append(self.pli[len(self.pli)-1]) mini=42 for c in self.joueurs[j].tas: if c.hauteur < mini and not c.est_un_bout(): mini=c.hauteur self.remplacant_excuse=c '''for k in xrange(1,5): if "k est un bot" joueurs[(self.maitre+i+k)%5].observe((self.maitre+i)%5)''' self.tours_a[self.couleur_demandee(self.pli)]+=1 self.maitre=(self.maitre_pli()+self.maitre)%5 if carte("excuse","") in self.pli: # Traitement particulier de l'excuse, partie 2 self.pli.remove(carte("excuse","")) if self.remplacant_excuse.couleur !="debut": self.pli.append(self.remplacant_excuse) joueurs[self.maitre].tas.extend(self.pli) '''Manque le sort particulier reserve a l'excuse'''
def appel_roi(self): # Ameliorable couleurs=["trefle","pique","carreau","coeur"] a=random.randint(0,3) if carte(couleurs[a],"roi") not in self.main: self.roi_appele=couleurs[a] else: for i in xrange(0,3): if carte(couleurs[(a+i)%4],"roi") not in self.main: self.roi_appele=couleurs[(a+i)%4] else: self.roi_appele="trefle"
def creation_cartes(self): couleurs=["excuse","atout","trefle","pique","carreau","coeur"] rangs=["as","2","3","4","5","6","7","8","9","10","valet","cavalier","dame","roi"] liste_cartes=[] for i in couleurs: if i=="atout": for j in xrange(1,22): liste_cartes.append(carte(i,str(j))) else: if i=="excuse": liste_cartes.append(carte(i,"")) else: for j in rangs: liste_cartes.append(carte(i,j)) self.liste_cartes=liste_cartes
def p0_reinitialisation(self,joueurs): for i in xrange(0,5): joueurs[i].main=[] joueurs[i].tas=[] joueurs[i].chien=[] joueurs[i].role="" joueurs[i].etat_annonce=None joueurs[i].attaquant=False self.joueurs[i]=joueurs[i] pack=paquet() pack.distribution_paquet(joueurs) self.pli=[] self.annonce=None self.appelant=None self.appele=None self.roi_appele=None #MODIFIE A PARTIR D'ICI-------------------------------------------------------------- self.tour=1 self.cartes_restantes=pack.liste_cartes self.atouts_restants=pack.liste_cartes[1:22] self.excuse_restante=True self.remplacant_excuse=carte("debut","as") self.coupes=[] for i in xrange(0,5): self.coupes.append({"atout":False, "trefle":False,"pique":False,"carreau":False,"coeur":False}) self.appele_connu=False self.tours_a= {"trefle":0,"pique":0,"carreau":0,"coeur":0,"atout":0} self.appelant_gagnant=False #FIN MODIF ---------------------------------------------------- '''Fin de la reinitialisation''' return pack.chien
def observe(self,n): # Le joueur numero n vient de jouer. La fonction observe rend compte de ce que peut enregistrr un observateur exterieur qui ne voit #le jeu de personne, qui ne voit que le plateau de jeu #Deja on enregistre le fait que la carte c ait ete jouee c=self.pli[len(self.pli)-1] col=c.couleur if col=="excuse": self.excuse_restante=False if col=="atout": self.atouts_restants.remove(c) '''if c in self.tetes_restantes: self.tetes_restantes.remove(c)''' self.cartes_restantes.remove(c) #Puis on enregistre le fait que le joueur ait eventuellement coupe/pisse col=self.couleur_demandee(self.pli) if col != "choix" and c.couleur != col and c.couleur!="excuse": self.coupes[n][col]=True #Ameliorable, on le refait a chaque tour ou le mec coupe if col!="atout" and c.couleur!="atout": self.coupes[n]["atout"]=True # Le joueur n'a plus d'atouts #Puis on regarde si le roi appele a ete joue, ou si on sait avec certitude qui est le roi appele ( dans l'ordre ) if self.appele_connu==False: if carte(self.roi_appele,"roi") in self.pli: self.appele_connu=True else: k=1 while k<5 and self.coupes[((self.appele)+k)%5][self.roi_appele]==True: k+=1 if k==5: #L'appelant s'est appele lui-meme, ou du moins le roi est dans le chien ou dans son jeu self.appele_connu=True
def appel_roi(self): # Annonce a la couleur ou il a la plus haute carte ( sauf le roi ), sinon, c'est qu'il a les 4 rois, il s'appelle tout seul self.tri_main() maximum=-1 col=None for c in self.main: if c.couleur != "atout" and carte(c.couleur,"roi") not in self.main and c.hauteur > maximum: maximum=c.hauteur col=c.couleur if col == None: col="trefle" self.roi_appele=col