Esempio n. 1
0
class Casino(object):
    def __init__(self):
        self.pencil = Pencil()
        self.level = Level(1)
        self.affichage = Affichage()
        self.player = self.get_user()
        self.nb_python = 0
        self.db = Database()

# @classmethod

    def get_user(self):
        name_user = input(self.affichage.get_txt_python())
        name_user.strip()
        return Player(name_user, 10, 1)

    #Fonction qui lance le jeu
    def play(self):
        self.db.player_exist(self.player.username)
        self.print_rules()
        try:
            self.ask_level()
            self.reset()
            if self.enough_credit():
                print('Règles => ', self.level.try_max,
                      'essais et nombre entre 1 et ', self.level.nb_max)
                print('Votre solde est de : ', self.player.credit, '€ !')
                self.ask_mise()
                self.guess_number()
                self.db.load_results_in_db(self.player)
                self.play_again()
        except InterruptedError:
            self.pencil.printFail(
                "Oh non vous avez perdu, mon nombre était {}  ".format(
                    self.nb_python))
            self.db.load_results_in_db(self.player)
            self.play_again()

    # Fonction qui redémarre le jeu
    def reset(self):
        self.nb_python = randint(1, self.level.nb_max)
        self.validator = Validator(self.player, self.level)
        self.player.nb_coup = 0

    # Fonction qui vérifie si le joueur a assez de gain
    def enough_credit(self):
        if not self.validator.is_credit_ok():
            print(' Au revoir ! ')
            return False
        else:
            return True

    # Fonction qui propose au joueur de choisir son niveau s'il a la possibilité
    def ask_level(self):
        level_max = self.db.get_level(self.player)
        print("Level le plus élevé atteint est {} . ".format(level_max))
        if level_max != 1:
            try:
                choixlevel = int(input("Choisissez votre level \n"))
                assert choixlevel > 0 and choixlevel <= level_max
                self.level = Level(choixlevel)
            except ValueError:
                self.pencil.printWarning("La valeur est incorrect ")
                self.ask_level()
            except AssertionError:
                self.pencil.printWarning(
                    "Saisie erronée. Veuillez saisir un nombre entre 1 et {0} "
                    .format(level_max))
                self.ask_level()
        else:
            print("Vous allez jouez le niveau {} .".format(level_max))

    # Fonction qui demande la mise du joueur
    def ask_mise(self, string=' Le jeu commence, entrez votre mise : '):
        try:
            cmpt_credit = int(input(string))
            assert self.player.credit >= cmpt_credit > 0
            self.player.mise = cmpt_credit
        except ValueError:
            self.ask_mise("Entrez un chiffre ! : ")
        except AssertionError:
            self.ask_mise("Entrez un chiffre entre 1 et {} : ".format(
                self.player.credit))

    def guess_number(self):
        try:
            nb_user = int(self.ask_number())
            if self.is_same_as_nb_python(nb_user):
                self.win()
            else:
                self.guess_number()
        except ValueError:
            pass

    def win(self):
        self.player.win = True

        if self.player.nb_coup == 1:
            self.player.du_1_coup = True

        gain = self.player.get_gain()
        self.pencil.printWin('Bingo ' + str(self.player.username) +
                             ' vous avez gagné en ' +
                             str(self.player.nb_coup) +
                             ' coup(s) et vous avez emporté ' + str(gain) +
                             ' € !')

        self.player.gain = gain
        self.player.credit += gain
        self.level.niveauSuperieur()
        self.player.level = self.level.current
        self.pencil.printWin('Super ! Vous passez au level {} ! '.format(
            self.level.current))

    #fonction qui demande au player de choisir un nombre
    def ask_number(self, string="Alors mon nombre est ? "):
        try:
            if not self.validator.enough_try_remaining(self.level):
                self.level.niveauInferieur()
                raise InterruptedError("Plus assez d'essai ! ")
            if not self.validator.get_answer_in_time(string):
                self.ask_number()
            assert 1 <= int(self.validator.answer) <= self.level.nb_max
            self.player.nb_coup += 1
        except ValueError:
            self.ask_number("Entrez un chiffre ! : ")
        except AssertionError:
            self.ask_number(
                "Je ne comprends pas ! Enter SVP un nombre entre 1 et {} : ".
                format(self.level.nb_max))

        return self.validator.answer

    # Fonction qui vérifie si le nombre du joueur est égale au nombre de python
    def is_same_as_nb_python(self, nb_user):
        if nb_user < self.nb_python:
            print('Votre nbre est trop petit !')
            return False
        elif nb_user > self.nb_python:
            print('Votre nbre est trop grand !')
            return False
        else:
            return True

    # Fonction qui demande au joueur s'il veut rejouer
    def play_again(self, string="Souhaitez-vous continuer à jouer (O/N) ? "):
        if self.validator.get_answer_in_time(string):
            again = self.validator.answer.strip().lower()
            self.db.print_stats(self.player)
            if again == 'o':
                print('Nouvelle partie')
                self.play()
            elif again == 'n':
                print("Au revoir, vous finissez la partie avec {}".format(
                    self.player.credit))
            else:
                self.play_again(
                    "Souhaitez-vous continuer à jouer (Entrez 'O' pour Oui et 'N' pour Non) ? "
                )
        else:
            print("Au revoir !")

    # Fonction qui affiche les règles du jeu
    def print_rules(self, string="Voulez-vous voir les regle du jeu ? o/n "):
        ans1 = str(input(string))
        ans1 = ans1.strip().lower()
        if ans1 == 'o':
            print("Voici les règles : ")
            self.regle()
        elif ans1 == 'n' or ans1 == '':
            pass
        else:
            self.print_rules(
                "Voulez-vous voir les regle du jeu ? Répondez par 'o' ou 'n '")

    #fonction qui affiche le regele de jeu
    def regle(self):
        self.pencil.printWin(
            "Hello  " + self.player.username +
            ", vous avez 10 €, Très bien ! Installez vous SVP à la table de pari.Je vous expliquerai le principe du jeu "
        )
        self.pencil.printWin(
            " Je viens de penser à un nombre entre 1 et " +
            str(self.level.nb_max) +
            ". Devinez lequel ? \n Att : vous avez le droit à trois essais ! \n Si vous devinez "
            "mon nombre dès le premier coup, vous gagnez le double de votre mise ! \n  Si vous "
            "le devinez au 2è coup, vous gagnez exactement votre mise ! \n Si vous le devinez au "
            "3è coup, vous gagnez la moitiè votre mise ! \n Si vous ne le devinez pas au 3è "
            "coup, vous perdez votre mise et \n vous avez le droit :  de retenter votre chance "
            "avec l'argent qu'il vous reste pour reconquérir le level perdu.")