# -*- coding: cp1252 -*- ############################### ### Mini-projet MasterMind #### ### Nio - Piveteau 2S-04 #### ### Version 01/02 #### ############################### ############################### ### Importation des Modules ### ############################### from random import * from sys import exit from math import * ############################### ######### Fonctions ########### ############################### def top() : ''' Affiche le texte lors du lancement du jeu ''' print '###############################' print '### Mini-projet MasterMind ####' print '### Nio - Piveteau 2S-04 ####' print '### Version 01/02 ####' print '###############################' return def alea(nombre=6,vide=0) : ''' Génére un tableau de X couleurs alétoire, par défault 6 tirages SANS REMISE, nombre -> nombre de le pions. vide -> si l'ordinateur est autorisé à tiré au sort un emplacement sans aucune couleur (pour le niveau EXPERT uniquement ) ''' # initialisation du tableau à NOMBRE ELEMENT # ex pour nombre = 6 -> t = [0,0,0,0,0,0] t = [] for i in range(nombre) : t.append(0) # Tirage au sort de 6 nombre parmi les couleurs dispos et insertion dans t i = 0 while (i < nombre) : # tirage de UN élement # insertion de l'élement dans le tableau t t[i] = randint(1,8) i = i+1 return t def win(compteur,coef) : ''' est utilisé lorsque le joueur a trouvé la combinaison EXACTE compteur -> nombre d'essai du joueur coef -> indice multiplicateur (1,2,3 ou 4) en fonction du niveau ''' score = compteur*coef print '' print '*********** Félicitation **************' print 'vous avez gagné !!!!!! votre score :', print score def lose(score=0) : ''' fonction appelée lorsqu'un joueur n'a pas pas trouvé la solution avec ces X essais ''' print 'vous avez perdu' def checkcolorok(t,proposition) : ''' vérifie le nombre de pions appartenant à la combinaison. couleurok -> renvoi le nombre de pions correctement placés ''' # on initialise le nombre de pions trouvé dans la combinaison couleurok = 0 # Boucle 1 : on partout les élément de la proposition du joueur for i in range(len(proposition)) : # Boucle 2 : on partout les élément de la solution tout en étant dans la boucle 1 for j in range(len(t)) : # si un pion de la solution correspond à un pion de la proposition on incrémente le compteur couleurok if proposition[i] == t[j] : couleurok = couleurok +1 return couleurok def check(historyessai,t,proposition,compteur) : ''' Cette fonction vérifie la proposition du joueur en 2 étapes : - Calcul du nombre de pions bien placés. - Calcul du nombre de pions qui appartiennent à la combinaison. (via la fonction checkcolorok) historyessai -> tableau contenant l'historique des différents essais du joueur ainsi que les nombres de pions bien placés et présent dans la combinaison t -> tableau contenant la solution, c'est la combinaison générée aléatoirement par l'ordinateur proposition -> c'st le tableau contenant la proposition du joeur La fonction va donc comparer le tableau t avec le tableau proposition.. ''' #recherche d'élement correctement placé placeok = [] for i in range(len(t)) : if t[i] == proposition[i] : placeok.append(i+1) # recherche d'élement contenu dans la propostion couleurok = checkcolorok(t,proposition) # on ajoute l'essai au tableau d'historique des essais : historyessai.append([placeok,couleurok,proposition,compteur]) # on retourne le tableau de l' return historyessai def proposition(level) : ''' ''' # on tire au sort un numéro à l'aide la fonction alea (par défault 6pions) t = alea() # la partie n'a pas commencé donc pour le moment on a pas gagné.. winok = False #on initialise l'historique des essais historyessai = [] print t print '' print '*************** C\'est parti *******************************************' print 'l\'ordinateur a généré une combinaison aléatoire, à vous de la trouver !' print '************* GOOOOO !!!!! ********************************************' for a in range (level[2]) : if a != 0 : ## si ce n'es pas le 1er essai (a != 0) c'est qu'il y a ## eu une proposition incorrect.. print '' print 'Proposition incorrect... essayer à nouveau' for o in range(len(checking)) : printplaceok = '' if level[4] == 1 : printplaceok = checking[o][0] print '* Essai N°', checking[o][3] ,' - ', 'avec la combinaisaion', checking[o][2], ':', len(checking[o][0]), 'pion(s) correctement placé(s) ',checking[o][0],'-', checking[o][1], 'pion(s) appartenant(s) à la combinaison.' else : print '' print level[5] # on prend compteur = a+1 car a est la position dans le tableau, #compteur + 1 sera donc le nombre exact de propositions deja effectuées compteur = a+1 ### On affiche le nombre de propositions deja effectués... print '' print 'proposition', print compteur, print '/', print level[2] # on demande à l'utilisateur de rentrer une proposition.. proposition = input('Effectuer une proposition :') # si les tableau sont identiques, c'est gagné ! if t == proposition : winok = True # on lance la fonction victoire win(compteur,level[0]) # on arrete tout car le joueur a gagné.. break # sinon on vérifie le nombre de pions bien placés.. else : checking = check(historyessai,t,proposition,compteur) # SORTIE DE LA BOUCLE DE DEMANDE DE PROPOSITION # si le nombre d'essai est finis et que la solution n'a pas été trouvé # c'est perdu ! if winok == False : lose() return level #### fin de la fonction proposition #### def alllevel() : ''' fonction contenant tout les niveaux de difficulté ''' #### [id_level,nom_level,essai_dispo,affichage_bien_placées,trou_combinaisaon] #### #### initialistion du tableau tlevel contenant les tableaux de niveau tlevel = [[],[],[],[]] # on insére les différents tableaux de niveau dans le tableau tlevel tlevel[0] = [1,'Niveau Expert',10,0,1,'Help expert'] tlevel[1] = [2,'Niveau Difficile',6,0,0,'Help difficile'] tlevel[2] = [3,'Niveau Intermédiaire',10,0,0,'Help intermédiaire'] tlevel[3] = [4,'Niveau Facile',10,1,0,'niveau facile'] print tlevel return tlevel def showlevel(tlevel): ''' on affiche les différents niveaux ''' k = 0 print '' print '' print '******* Choix du niveau ***********' while (k < len(tlevel)) : print tlevel[k][0], print ' - ', print tlevel[k][1] k = k +1 return k def chooselevel() : ''' demande à l'utilisateur de choisir un niveau ''' # demande à l'utilisateur de rentrer le niveau choisit level = input('Choissisez votre niveau de difficulté :') # si le niveau est différents de 1,2,3 ou 4 alors nouvelle demande while (level != 1 and level != 2 and level != 3 and level != 4) : level = input('Choissisez votre niveau de difficulté (1,2,3 ou 4 uniquement ):') # on enlève 1 à level car un tableau commence à 0 et non à 1.. level = level - 1 return level def start() : ''' Fonction qui lance le jeu, elle sert a présenter les différents niveau... ''' # on récupére les niveaux tlevel = alllevel() #on affiche les différents niveau showlevel(tlevel) #on demande à l'utilisateur de choisir un niveau level = chooselevel() # on enregistre le niveau choisit par l'utilisateur dans la variable level level = tlevel[level] # on commence l'affichage ou le joueur pourra proposer ses solutions proposition(level) # la partie est terminé ? on recommence ! start() return level ### fin de la fonction start ### ############################ ####### EXECUTION ########## ############################ # on affiche le texte de départ top() # et c'est parti ! start()