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)
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
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()
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))
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))