Calculateur de scores pour le tarot

Essai de réalisation d'un calculateur de score pour le tarot. Ecris en python 3. Toujours en développement (reste à encoder la partie à 5 joueurs, opérationnel pour 3 et 4 joueurs à ce jour).

Plus de docs et de détails par la suite..

Pour bénéficier de la dernière version à jour, merci de vérifier sur le git : tarot-v3.py sur le git

#!/usr/bin/env python # -*- coding: utf-8 -*- """Programme de calcul des scores au tarot""" __author__ = "Cyrille BIOT" __copyright__ = "Copyleft" __credits__ = "Cyrille BIOT" __license__ = "GPL" __version__ = "3.0.0" __maintainer__ = "Cyrille BIOT" __email__ = "cyrille@cbiot.fr" __status__ = "Devel" liste_des_primes = [] # Gestion du nombre de joueurs nb_joueurs = -1 while True: try: print('Entre 3 et 5 joueurs, svp.') nb_joueurs = int(input("Saisir le nombre de joueurs : ")) if 2 < nb_joueurs < 6: # print("Nombre de joueurs : ", nb_joueurs) break except ValueError: print("Oops! Réponse incorrecte, ce n'est pas un nombre... Réessayer...") # =================================================== # Creation d'un dictionnaire de joueurs dico_joueurs = dict() for i in range(0, nb_joueurs): joueur = input("Nom du joueur {} : ".format(i + 1)) print(joueur) # Initialisation des scores # Tout le monde à zéro dico_joueurs[joueur] = [0] for nom, point in dico_joueurs.items(): print("Le joueur {} débute avec {} point.".format(nom, point[0])) # =================================================== # Creation d'un dictionnaire de contrat dico_contrat = dict() dico_contrat['petite'] = 25 dico_contrat['garde'] = 25 * 2 dico_contrat['garde sans '] = 25 * 3 dico_contrat['garde contre'] = 25 * 5 # Gestion des oudlers # Création d'un dictionnaire d'oudlers dico_oudlers = dict() dico_oudlers[0] = 56 dico_oudlers[1] = 51 dico_oudlers[2] = 41 dico_oudlers[3] = 36 # Gestion des primes # Création d'un dictionnaire d'oudlers dico_primes = dict() dico_primes['petit au bout'] = 10 dico_primes['simple poignée'] = 20 dico_primes['double poignée'] = 30 dico_primes['triple poignée'] = 40 dico_primes['chelem annoncé realisé'] = 400 dico_primes['chelem annoncé non realisé'] = -200 dico_primes['chelem non annoncé mais realisé'] = 200 # ===================================================================================================================== # Les fonctions # ===================================================================================================================== def verificationContrat(nombre_de_points, pari_oudlers): # Contrat rempli ou non ? Calcul du bonus / malus if nombre_de_points >= pari_oudlers: print("Le contrat est rempli.") else: print("Le contrat n'est pas rempli.") gain = nombre_de_points - pari_oudlers print("{} points remportés dans ce tour.".format(gain)) return gain # =================================================== def updateScore(gain, preneur, liste_beneficiaire_prime): # Mise à jour du score # Ajout des scores print(dico_primes) # Si contrat rempli if (gain > 0) : for nom in dico_joueurs: score = dico_joueurs[nom][-1] if nom == preneur: score = score + (gain + dico_contrat[contrat_tour]) * (nb_joueurs - 1) else: score = score - (gain + dico_contrat[contrat_tour]) dico_joueurs[nom].append(score) # Si contrat non rempli else: for nom in dico_joueurs: score = dico_joueurs[nom][-1] if nom == preneur: score = score + (gain - dico_contrat[contrat_tour]) * (nb_joueurs - 1) else: score = score - (gain - dico_contrat[contrat_tour]) dico_joueurs[nom].append(score) # GESTION DES PRIMES print("Dico des primes : " , dico_primes) print("Liste des primes : ", liste_beneficiaire_prime) i = 0 for nom in liste_beneficiaire_prime: print(nom) if nom[0] == liste_beneficiaire_prime[i][0]: bonus = dico_primes[liste_beneficiaire_prime[i][1]] print(nom, bonus) else: bonus = dico_primes[liste_beneficiaire_prime[i][1]] * -1 print(nom, bonus) i += 1 print(dico_joueurs) # Initialisation des paramètres du tour def parametrageTour(): # Gestion du preneur preneur = "" while True: try: preneur = input("Preneur : ") if preneur in dico_joueurs: print("Le preneur est {}".format(preneur)) break else: print("Ce joueur n'existe pas. Réessayer.") except ValueError: print("Erreur...") # =================================================== # Gestion du contrat contrat_tour = "" while True: try: contrat_tour = input("Contrat : ") contrat_tour = contrat_tour.lower() if contrat_tour in dico_contrat: print("Le contrat est {}".format(contrat_tour)) break else: print("Ce contrat n'existe pas. Réessayer.") except ValueError: print("Erreur...") # =================================================== # Gestion du nombre d'oudlers nb_oudlers = "" while True: try: print('Nombre d\'oudler(s) : 0, 1, 2 ou 3') nb_oudlers = int(input("Saisir le nombre d'oudler(s) : ")) if nb_oudlers in dico_oudlers: print( "Nombre d'oudler est {}. Il faut réaliser {} points.".format(nb_oudlers, dico_oudlers[nb_oudlers])) break except ValueError: print("Oops! Réponse incorrecte, ce n'est pas un nombre... Réessayer...") # =================================================== # Gestion du nombre de points while True: try: nb_points = int(input("Saisir le nombre de points réalisés : ")) if 0 < nb_points < 92: print("Nombre de points réalisés : ", nb_points) break except ValueError: print("Oops! Réponse incorrecte, ce n'est pas un nombre... Réessayer...") # =================================================== # Gestion des primes while True: try: primes = input(" Y a-t-il des primes (oui/o ou non/n ) ? : ") if primes.lower() in ['oui', 'o']: print("des primes cool") # Gestion des primes fin_des_primes = 'oui' beneficiaire = '' #liste_des_primes = [] while fin_des_primes.lower() not in ['non', 'n']: while True: try: beneficiaire = input("Bénéficiaire de la prime : ") if beneficiaire in dico_joueurs: print("Le beneficiaire est {}".format(beneficiaire)) break else: print("Ce joueur n'existe pas. Réessayer.") print('Rappel. Voici la liste des joueurs : ') i = 0 for nom in dico_joueurs: print(" --- Joueur {} : {}".format(i + 1, nom)) i += 1 except ValueError: print("Erreur...") while True: try: prime = input("Quelle prime attribuer à {} ? : ".format(beneficiaire)) if prime in dico_primes: print("{} accordée à {}. ".format(prime, beneficiaire)) break else: print("Cette prime n'existe pas. Réessayer.") print('Rappel. Voici la liste des primes : ') for nom, valeur in dico_primes.items(): print("Prime : {}, valeur : {}.".format(nom, valeur)) except ValueError: print("Erreur...") liste_des_primes.append((beneficiaire, prime)) fin_des_primes = input("Y a-t-il des autres primes à saisir ? ") else: print('Les primes ont été enregistrées.') break elif primes.lower() in ['non', 'n']: print('Pas de primes à prendre en compte.') break except ValueError: print("Oops! Réponse incorrecte. Saisir : (oui/o ou non/n ) ... Réessayer...") # =================================================== return nb_points, nb_oudlers, contrat_tour, preneur, liste_des_primes # ===================================================================================================================== # Lancement du jeu # ===================================================================================================================== fin_du_jeu = '' while fin_du_jeu.lower() != 'quitter': nb_points, nb_oudlers, contrat_tour, preneur, liste_des_primes = parametrageTour() gain = verificationContrat(nb_points, dico_oudlers[nb_oudlers]) updateScore(gain, preneur, liste_des_primes) fin_du_jeu = input("Cesser la partie ? Saisir 'Quitter' : ") else: print('on stoppe la partie.')