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 " \n Il 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. \n Si les trois chiffres sont des 9, vous gagnez tout le bac! \n Si vous tombez sur 3 chiffres identiques différents de 9 \n , alors vous gagnez 6 fois votre mise. \n Si vous avez 2 identiques, alors vous gagnez 3 fois la mise que vous avez mis. \n Si 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 ( )