All pastes #399063 Raw Edit

Stuff

public text v1 · immutable
·published 2007-03-17 18:31 UTC
rendered paste body
# -*- 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()