You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
8.1 KiB
220 lines
8.1 KiB
import random
|
|
import tkinter as tk
|
|
from tkinter import messagebox
|
|
|
|
class Machine_a_sous:
|
|
"""classe principale gérant le casino"""
|
|
def __init__(self):
|
|
self.argent = 0
|
|
self.nombres = []
|
|
self.bank = 1000
|
|
self.mise = -1
|
|
self.gains = 0
|
|
|
|
def saisie(self):
|
|
"""demande à l'utilisateur une mise"""
|
|
print('saisie')
|
|
try:
|
|
machine.mise = int(machine.mise)
|
|
if not 100 > self.mise >= 0 or not self.mise <= self.argent: # tant que mise n'est pas compris entre 0-100 et > mise
|
|
return False
|
|
if self.mise > self.argent or self.mise == 0:
|
|
return "quit"
|
|
else:
|
|
self.bank += self.mise
|
|
self.argent -= self.mise
|
|
return self.mise
|
|
except:
|
|
if machine.mise == "stop":
|
|
return "quit"
|
|
|
|
def nbAlea(self):
|
|
"""renvoie une liste de 3 nombre aléatoires entre 0 et 9"""
|
|
self.nombres = [random.randint(0,9) for i in range(3)]
|
|
return self.nombres
|
|
|
|
def gain(self):
|
|
"""Mets à jour les gains de l'utilisateurs"""
|
|
print('hello')
|
|
print(self.mise, self.argent, self.bank)
|
|
print(self.nombres)
|
|
if len(set(self.nombres)) == 1 and 9 in self.nombres:
|
|
self.gains = self.bank + self.mise
|
|
self.argent += self.gains
|
|
self.bank = 0
|
|
elif len(set(self.nombres)) == 1:
|
|
self.gains = self.mise * 6
|
|
self.argent += self.gains
|
|
self.bank -= self.gains
|
|
elif len(set(self.nombres)) == 2:
|
|
self.gains = self.mise * 3
|
|
self.argent += self.gains
|
|
self.bank -= self.gains
|
|
else:
|
|
self.gains = 0
|
|
return self.gains
|
|
|
|
def affiche(self):
|
|
"""affiche les trois rouleaux"""
|
|
print(f"premier rouleau : {self.nombres[0]},deuxième rouleaux : {self.nombres[1]},troisième rouleaux {self.nombres[2]}")
|
|
print(f"Vous avez gagné {self.gains} jetons")
|
|
print(f"\nIl vous reste {self.argent} jetons, et il reste {self.bank} jetons dans le bac de la machine.\n")
|
|
|
|
|
|
class Game_gui:
|
|
"""Interface graphique du casino"""
|
|
def __init__(self):
|
|
self.bg_color = '#777777'
|
|
self.fen = tk.Tk()
|
|
self.fen.geometry('900x600')
|
|
self.fen.title('Bellagio')
|
|
self.fen.config(background=self.bg_color)
|
|
self.name_frame = ['banque', 'mise', 'argent']
|
|
self.frame = [tk.LabelFrame(self.fen, background=self.bg_color, labelanchor='n', text=i) for i in self.name_frame]
|
|
self.name_info = [machine.bank, 0, machine.argent]
|
|
self.info = [tk.Label(self.frame[i], background=self.bg_color, text=self.name_info[i], width=8, font=('Helvetica', 36, 'bold')) for i in range(3)]
|
|
self.column = [1, 2, 5]
|
|
|
|
for i in range(3):
|
|
if i != 1:
|
|
self.frame[i].grid(column=self.column[i], row=1, padx=24)
|
|
else:
|
|
self.frame[i].grid(columnspan=3, column=self.column[i], row=1)
|
|
self.info[i].grid()
|
|
|
|
self.entry_mise = tk.Entry(self.fen, width=40)
|
|
self.entry_mise.insert(0, 'Entrez votre mise entre 0 et 100')
|
|
self.entry_mise.grid(columnspan=3, column=2, row=3)
|
|
|
|
self.rouleaus = [tk.Label(self.fen, width=4, pady=150, text=0, background=self.bg_color, fg='#db0000', font=('Helvetica', 36, 'bold')) for i in range(3)]
|
|
for i in range(3):
|
|
self.rouleaus[i].grid(column=i+2, row=2)
|
|
|
|
self.fen.bind('<Return>', self.play)
|
|
self.fen.mainloop()
|
|
|
|
def play(self, event):
|
|
"""méthode qui gère le fonctionnement du jeu grace à la classe Machine_à_sous"""
|
|
machine.mise = self.entry_mise.get()
|
|
mise_state = machine.saisie()
|
|
if mise_state == "quit":
|
|
self.fen.quit()
|
|
self.fen.destroy()
|
|
elif mise_state != False:
|
|
machine.nbAlea()
|
|
machine.gain()
|
|
self.name_info = [machine.bank, machine.mise, machine.argent]
|
|
print(self.name_info)
|
|
self.maj_graph()
|
|
if machine.bank <= 500 or machine.argent == 0:
|
|
self.fen.destroy()
|
|
|
|
def maj_graph(self):
|
|
"""Rafraîchi l'affichage des infos et rouleaux"""
|
|
for rouleau in range(3):
|
|
self.rouleaus[rouleau].config(text=machine.nombres[rouleau])
|
|
for i in range(len(self.info)):
|
|
self.info[i].config(text=self.name_info[i])
|
|
|
|
|
|
class Menu_gui:
|
|
"""Interface graphique du menu (règles et argent)"""
|
|
def __init__(self):
|
|
self.fen = tk.Tk()
|
|
self.bg_color = '#777777'
|
|
self.fen.geometry('900x600')
|
|
self.fen.title('Bellagio')
|
|
self.fen.config(background=self.bg_color)
|
|
|
|
self.pres = tk.Label(self.fen, text='Bienvenue au casino', font=('Helvetica', 36, 'bold'), background=self.bg_color)
|
|
self.pres.pack()
|
|
|
|
self.regle = tk.Label(self.fen, text=regles(), pady=50, font=('Helvetica', 16, 'bold'), background=self.bg_color)
|
|
self.regle.pack()
|
|
|
|
self.entry_mise = tk.Entry(self.fen, width=100)
|
|
self.entry_mise.insert(0, 'Entrez votre somme de départ')
|
|
self.entry_mise.pack()
|
|
|
|
self.fen.bind('<Return>', self.get_argent)
|
|
|
|
self.fen.mainloop()
|
|
|
|
def get_argent(self, event):
|
|
"""récupère l'argent saisie par l'utilisateur"""
|
|
machine.argent = int(self.entry_mise.get())
|
|
self.fen.destroy()
|
|
|
|
class Fin_gui:
|
|
"""Interface du menue de fin"""
|
|
def __init__(self):
|
|
self.fen = tk.Tk()
|
|
self.bg_color = '#777777'
|
|
self.fen.geometry('900x600')
|
|
self.fen.title('Bellagio')
|
|
self.fen.config(background=self.bg_color)
|
|
|
|
self.name_frame = ['banque', 'mise', 'argent']
|
|
self.frame = [tk.LabelFrame(self.fen, background=self.bg_color, labelanchor='n', text=i) for i in self.name_frame]
|
|
self.name_info = [machine.bank, 0, machine.argent]
|
|
self.info = [tk.Label(self.frame[i], background=self.bg_color, text=self.name_info[i], width=8, font=('Helvetica', 36, 'bold')) for i in range(3)]
|
|
self.column = [1, 2, 5]
|
|
|
|
for i in range(3):
|
|
if i != 1:
|
|
self.frame[i].grid(column=self.column[i], row=1, padx=24)
|
|
else:
|
|
self.frame[i].grid(columnspan=3, column=self.column[i], row=1)
|
|
self.info[i].grid()
|
|
|
|
self.quit = tk.Button(self.fen, width=40, text ="Quitter", command = self.fen.destroy)
|
|
self.quit.grid(columnspan=3, column=2, row=3)
|
|
|
|
self.fen.mainloop()
|
|
|
|
class Fdj:
|
|
"""Test pour savoir si le joueur est majeur et à le droit de rentrer dans le casino"""
|
|
def __init__(self):
|
|
|
|
self.est_majeur = False
|
|
|
|
self.fen = tk.Tk()
|
|
self.bg_color = '#777777'
|
|
self.fen.geometry('900x600')
|
|
self.fen.title('Bellagio')
|
|
self.fen.config(background=self.bg_color)
|
|
|
|
self.question = tk.Label(self.fen, text='Etes-vous majeur?', font=('Helvetica', 36, 'bold'), background=self.bg_color)
|
|
self.question.pack()
|
|
self.entry = tk.Entry(self.fen, width=100)
|
|
self.entry.insert(0, 'repondez oui ou non')
|
|
self.entry.pack()
|
|
|
|
self.fen.bind('<Return>', self.get_rep)
|
|
|
|
self.fen.mainloop()
|
|
|
|
def get_rep(self, event):
|
|
"""indique si le joueur est majeur"""
|
|
# indique si le joueur est majeur
|
|
if self.entry.get() == "oui":
|
|
self.est_majeur = True
|
|
self.fen.destroy()
|
|
else:
|
|
tk.messagebox.showinfo("Aurevoir", "Vous êtes mineurs, vous n'avez pas l'âge de jouer!")
|
|
self.fen.destroy()
|
|
|
|
|
|
|
|
def regles():
|
|
text ="La machine 1000 jetons au départ.\nSi les trois chiffres sont des 9, vous gagnez tout le bac!\nSi vous tombez sur 3 chiffres identiques différents de 9\n, alors vous gagnez 6 fois votre mise.\nSi vous avez 2 identiques, alors vous gagnez 3 fois la mise que vous avez mis.\nSi aucun chiffres ne sont identiques vous ne gagnez rien."
|
|
return text
|
|
|
|
|
|
fdj = Fdj()
|
|
if fdj.est_majeur:
|
|
"""Lance toutes les classes"""
|
|
machine = Machine_a_sous()
|
|
menu = Menu_gui()
|
|
gui = Game_gui()
|
|
fin = Fin_gui()
|