Ejemplo n.º 1
0
 def __init__(self, mot) :
     self.mot = mot
     self.jetons=[]
     for c in self.mot :
         lettre = c.upper()
         if  'A'<= lettre <= 'Z' or lettre == '?': 
             j = jeton.jeton(lettre)
             self.jetons.append(j)
Ejemplo n.º 2
0
    def point (self, w_coord , w_mot , scrab , dic) :
        """
        Renvoie le nombre de points de la proposition coord / mot
        Il faut indiquer le booléen scrab issu de controle

        Le nombre de point est renvoyé dans tous les cas, y compris si le mot n'existe pas.
        Une liste (mot_nonex) est constituée des mots non existants

        Test réalisé avec dic
        """
        
        point = 0          # initialise le score
        totv = 0           # initialse le cumul des mots réalisés en posant des lettres
        multmot = 1        # initialise le multiplicateur de score
        mot_nonex = []     # initialise liste mot non existant a vide

        i_coord = w_coord            # i_coord : indice de coordonnée courante

        if dic.isMot(w_mot) == False :      # si le mot proposé n'existe pas
            mot_nonex.append(w_mot)

        for l in w_mot :
            # on parcourt chaque lettre du mot        
            jl = jeton.jeton(l)
            pointl = jl.point               # nombre de points de la lettre courante

            # gestion des primes de lettre

            if self.case_vide(i_coord) :
                if self.case_prime(i_coord) == LT :
                    pointl *= 3
                elif self.case_prime(i_coord) == LD :
                    pointl *= 2
                #si la case est vide, on regarde si un mot est réalisé
                tvois = False               # mot voisin réalisé ?
                pointv = pointl             # initailise le score du mot voisin
                motv = l  # initialise la chaine du mot voisin

                # on remonte vers le haut/gauche tant que les cases sont occupées
                j_coord = i_coord.haut()
                while self.case_nonvide(j_coord) : 
                    j = self.case_coord(j_coord).jeton
                    motv = j.lettre + motv  # on insère les lettres par l'avant
                    pointv += j.point       # on cumule les points sans prime
                    tvois = True
                    j_coord=j_coord.haut()

                # on descend vers le bas/droite tant que les cases sont occupées
                j_coord = i_coord.bas()
                while self.case_nonvide(j_coord) : 
                    j = self.case_coord(j_coord).jeton
                    motv += j.lettre        # on insère les lettres par l'avant
                    pointv += j.point       # on cumule les points sans prime
                    tvois = True
                    j_coord=j_coord.bas()

                # gestion des primes de mot
                if self.case_prime(i_coord) == MT :
                    multmot *= 3            # le multiplicateur du mot posé est mis à jour
                    pointv  *= 3            # le score du mot voisin bénéficie de la prime
                elif self.case_prime(i_coord) == MD :
                    multmot *= 2            # le multiplicateur du mot posé est mis à jour
                    pointv  *= 2            # le score du mot voisin bénéficie de la prime

                # vérification de l'existence des mots voisins
                # renvoie 0 pour le score global si inexistant
                # met à jour totv sinon
                if tvois :
                    if dic.isMot(motv) == False : 
                        mot_nonex.append(motv)
                    totv += pointv 
            else :
                # la case n'est pas vide
                if self.case_joker(i_coord) :
                    # la case contient un joker, donc 0 point
                    # y compris si l'utilisateur n'a pas "shifté" la lettre
                    pointl = 0 

            # fin de l'analyse de la lettre courante
            # on met à jour point et on passe au suivant
            point += pointl
            i_coord = i_coord.next()

        # calcul global du score :
        # on applique le multiplicateur de score et on ajoute
        # le score des mots voisins

        point = point * multmot + totv

        # plus la prime de scrabble éventuele de 50 points
        if scrab :
            point += 50

        return point, mot_nonex
Ejemplo n.º 3
0
 def pose(self, c, mot) :
     for l in mot :
         if self.case_vide(c) :
             self.case_coord(c).jeton = jeton.jeton(l)
         c = c.next()
Ejemplo n.º 4
0
 def __init__(self):
     self.__freq = dict(zip(char, repart))
     self.__jetons = []
     for lettre in char:
         for i in range(self.__freq[lettre]):
             self.__jetons.append(jeton.jeton(lettre, jeton.RELIQUAT))
Ejemplo n.º 5
0
 def __init__(self) :
     self.__freq = dict(zip(char,repart))
     self.__jetons = []
     for lettre in char :
         for i in xrange(self.__freq[lettre]) :
             self.__jetons.append(jeton.jeton(lettre, jeton.RELIQUAT))