Jeu classique du mastermind : pour lancer le jeu »> mastermind() ou sélectionner la fonction mastermind() après l’appui de la touche var. Le nombre de couleurs et de positions est paramétrables mais attention les difficultés montent très vite. Choix classique : 6 couleurs (de 0 à 5) et 4 positions vous pouvez vous confronter à la machine, saisir la lettre o puis suivre les indications. Important : choisir la police petite (voir menu. paramètres de la machine)
from random import randint def bien_places(u, v): cpt = 0 for i in range(len(u)): if u[i] == v[i] : cpt+=1 return(cpt) def repartition_couleurs(combi, nb_couleurs): t=[] for i in range(nb_couleurs): t.append(int(0)) for i in range(len(combi)) : t[combi[i]]+=1 return (t) def bien_ou_mal_places(u, v, nb_couleurs): total = 0 ubis = repartition_couleurs(u, nb_couleurs) vbis = repartition_couleurs(v, nb_couleurs) for i in range(nb_couleurs): if ubis[i] <= vbis[i]: total += ubis[i] else : total += vbis[i] return (total) def similarite(u, v, nb_couleurs): x = bien_places(u, v) y = bien_ou_mal_places(u, v, nb_couleurs)- x # y = mal_places return (x, y) def prochain(u,nb_couleurs): longueur_combi = len(u) proposition_suivante=[] for i in range(longueur_combi): proposition_suivante.append(u[i]) retenue = False retenue_cpt = 0 for i in range(longueur_combi): if retenue or i==0 : if proposition_suivante[longueur_combi -(1+i)] + 1 >= nb_couleurs : proposition_suivante[longueur_combi-(1+i)] = 0 retenue = True retenue_cpt += 1 else : proposition_suivante[longueur_combi -(1+i)] += 1 retenue = False if retenue_cpt == longueur_combi : return (-1) else : return (proposition_suivante) def compatible(combi, historique, nb_couleurs): compatibilite = True for i in range(len(historique)): if similarite(combi,historique[i][0],nb_couleurs)!=historique[i][1]: compatibilite = False break return(compatibilite) def trouve(but, nb_couleurs, historique): combi_courante=[] for i in range(len(but)): combi_courante.append(0) while True : if combi_courante == but : print ("Combinaison trouvée : ",combi_courante) break if compatible(combi_courante,historique,nb_couleurs): histotuple=(combi_courante,similarite(combi_courante,but,nb_couleurs)) print ("Proposition, info : ",histotuple) historique.append(histotuple) combi_courante = prochain(combi_courante,nb_couleurs) #---- Début du programme principal ----- def mastermind(): print ("Voulez vous confronter à la machine ?") print ("Si oui : répondre o") print ("sinon entrer un autre caractère") reponse = input("Réponse = ") if reponse == "o" : print("Une fois les 2 paramètres saisis") print("La calculette va proposer une combinaison") print("Elle va très vite faire défiler l'écran") print("pour que la combinaison soit à deviner") print("") nbccouls = int(input("Nombre de couleurs = ")) nbppositions = int(input("Nombre de positions = ")) liste_ordi = [] for w in range (nbppositions): liste_ordi.append(randint(0,nbccouls-1)) print ("Combinaison proposée :",liste_ordi) for i in range (20) : print("") print (nbccouls, "couleurs de 0 à", nbccouls-1) print (nbppositions, "positions") print ("Info (x, y) signifie :") print ("x pions (couleur ok) bien placés") print ("y pions (couleur ok) mal placés") historiquej=[] combi_courante=[] for x in range(nbppositions): code_couleur = int(input("Couleur "+str(x+1)+" = ")) combi_courante.append(code_couleur) nb_coups = 1 while combi_courante != liste_ordi : print("combi courante =", combi_courante) historiquej.append( ( combi_courante , similarite(combi_courante, liste_ordi,nbccouls) ) ) for z in range(len(historiquej)): print ("Proposition, info : ",historiquej[z]) combi_courante=[] # Attention avec les adresses for x in range(nbppositions): code_couleur = int(input("Couleur "+str(x+1)+" = ")) combi_courante.append(code_couleur) nb_coups += 1 print ("Bravo, gagné en",nb_coups,"coup(s)") ################################################################################## print ("\nA la machine de trouver") print ("Conseil :si vous avez joué proposez") print ("la même combinaison de couleurs") print ("pour voir qui est le plus fort\n") nbccouls = int(input("Nombre de couleurs = ")) nbppositions = int(input("Nombre de positions = ")) historique=[] liste_a_trouver = [] for p in range(nbppositions) : couleur_entree = int(input("Couleur " + str(p+1) + " = ")) while couleur_entree < 0 or couleur_entree >= nbccouls : print ("Couleur comprise entre ",0," et ",str(nbccouls-1)) couleur_entree = int(input("Couleur " + str(p+1) + " = ")) liste_a_trouver.append(couleur_entree) print ("Combinaison à trouver = ",liste_a_trouver) print ("Info (x, y) signifie : ") print ("x pions (couleur ok) bien placés") print ("y pions (couleur ok) mal placés") trouve (liste_a_trouver,nbccouls,historique) print ("Gagné en",len(historique)+1,"coup(s)")