-
Notifications
You must be signed in to change notification settings - Fork 0
/
Casino.py
177 lines (159 loc) · 7.41 KB
/
Casino.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
from random import randint
from Level import Level
from Player import Player
from Validator import Validator
from Database import Database
from Pencil import Pencil
from Affichage import Affichage
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.")