Simulation de loto

Soyez le premier à donner votre avis sur cette source.

Vue 19 611 fois - Téléchargée 857 fois

Description

C'est un petit programme permetant de simulé un lancer de loto. Pour cela il fait appel un un module nommé "Loto". Tout le reste, c'est de l'interface graphique et de la gestion des profils des joueurs. Le principe du jeu n'est pas très interressant, je vous l'accorde, mais c'est pour montre un peut la gestion des fichier sous Python, et encore montrer quelques Widget présent dans WxPython. Je met, le code ici pour que ce qui ne sont pas inscrit puisse en profité, mais il faut savoir qu'il ne fonctionnera pas : il vous manquera le module et quelques fichiers et images pour le faire fonctionner correctement.

Source / Exemple :


import wx
import Loto
import os
import time
import locale
import  wx.html as  html
import wx.lib.hyperlink as hl

provider = wx.SimpleHelpProvider()
wx.HelpProvider_Set(provider)

class Aide(wx.Frame):
    def __init__(self, parent, path):
        wx.Frame.__init__(self, parent, -1,"Aide sur le jeu", size=wx.Size(700,610))
        self.SetIcon(wx.Icon("Loto-data\Icone2.ico", wx.BITMAP_TYPE_ICO ))

        self.path = path
        
        self.html = html.HtmlWindow(self, -1, style=wx.NO_FULL_REPAINT_ON_RESIZE)

        self.printer = html.HtmlEasyPrinting()

        self.box = wx.BoxSizer(wx.VERTICAL)

        self.box.Add(self.html, 1, wx.GROW)
        self.SetSizer(self.box)
        self.SetAutoLayout(True)

        self.Home(None)

    def Home(self, event):
        self.html.LoadPage(self.path)

class Dialog_Compare(wx.Dialog):
    def __init__(
            self, parent, ID, title,li1,li11,li2,li22,joueur, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):

        pre = wx.PreDialog()
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)

        ti=wx.StaticText(self, -1, "Analise des résultats")

        texte1=""
        i=0
        while i<len(li1): 
            if i==len(li1)-1:
                texte1=texte1 + " et le " + str(li1[i])
            else:
                texte1=texte1 + " le " + str(li1[i]) +','
            i=i+1

        t0=wx.StaticText(self, -1, "Vous avez joué pour le premier tirage" + texte1)

        texte1=""
        i=0
        while i<len(li11): 
            if i==len(li11)-1:
                texte1=texte1 + " et le " + str(li11[i])
            else:
                texte1=texte1 + " le " + str(li11[i]) +','
            i=i+1
                
        t1=wx.StaticText(self, -1, "Les numéro gagnant sont" + texte1)
        
        g1=0
        i=0
        while i<len(li1):
            if li1[i] in li11:
                g1=g1+1
            i=i+1
            
        t2=wx.StaticText(self, -1, "Vous avez " + str(g1) + " numéro(s) en commun")
        
        line1 = wx.StaticLine(self, -1, size=(20,-1), style=wx.LI_HORIZONTAL)
        
        texte1=""
        i=0
        while i<len(li2): 
            if i==len(li2)-1:
                texte1=texte1 + " et le " + str(li2[i])
            else:
                texte1=texte1 + " le " + str(li2[i]) +','
            i=i+1

        t3=wx.StaticText(self, -1, "Vous avez joué pour le deuxième tirage" + texte1)

        texte1=""
        i=0
        while i<len(li22): 
            if i==len(li22)-1:
                texte1=texte1 + " et le " + str(li22[i])
            else:
                texte1=texte1 + " le " + str(li22[i]) +','
            i=i+1
                
        t4=wx.StaticText(self, -1, "Les numéro gagnant sont" + texte1)
        
        g2=0
        i=0
        while i<len(li2):
            if li2[i] in li22:
                g2=g2+1
            i=i+1
            
        t5=wx.StaticText(self, -1, "Vous avez " + str(g2) + " numéro(s) en commun")
        
        nom='Loto-data\info'+joueur
        f=open(nom,'r')
        l1=f.readline()
        l2=f.readline()
        l3=f.readline()
        l4=f.readline()
        f.close()
        l2=int(l2)+1
        l3=int(l3)+g1+g2

        nom='Loto-data\info'+joueur
        f=open(nom,'w')
        locale.setlocale(locale.LC_ALL,'') 
        temp=time.strftime('Le %A %d %B %Y ; %H h %M min et %S s')
        contenu=str(l1)+str(l2)+'\n'+str(l3)+'\n'+temp
        f.write(contenu)
        f.close()
        
        sizer.Add(ti,0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t0,0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t1,0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t2,0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(line1,0, wx.GROW|wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t3,0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t4,0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t5,0, wx.ALIGN_CENTRE|wx.ALL, 5)

        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_OK,u"OK")
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)

        

class Dialog_InfoJoueur(wx.Dialog):
    def __init__(
            self, parent, ID, title,joueur, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):

        pre = wx.PreDialog()
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)

        ti="Imformation sur le joueur : " + joueur +'\n'
        titre=wx.StaticText(self, -1, ti)

        fichier="Loto-Data\info"+joueur
        f=open(fichier,"r")
        
        l1=f.readline()
        if l1=="0\n" or l1=="0":
            st=" Normal"
        elif l1=="1\n" or l1=="1":
            st=" Privilégié"
        else:
            st=" Défavorisé"
        
        l2=f.readline()
        nbj=" "+str(l2)
        
        l3=f.readline()
        nbg=" "+str(l3)
        
        j=int(l2)
        g=int(l3)
        nbp=str(j*12-g)
        
        l4=f.readline()
        if l4=="0" or l4=="0\n":
            du=" N'a jamais joué"
        else :
            du= " "+str(l4)
            
        f.close()
        

        t0=wx.StaticText(self, -1, "Statut du joueur :\n")
        t1=wx.StaticText(self, -1, "Nombre de jeux :\n")
        t2=wx.StaticText(self, -1, "Nombre de numéro trouvé :\n")
        t3=wx.StaticText(self, -1, "Nombre de numéro perdu :\n")
        t4=wx.StaticText(self, -1, "Dernière utilisation :")

        t10=wx.StaticText(self, -1, st)
        t11=wx.StaticText(self, -1, nbj)
        t12=wx.StaticText(self, -1, nbg)
        t13=wx.StaticText(self, -1, nbp)
        t14=wx.StaticText(self, -1, du)

        sizer.Add(titre, wx.ALIGN_CENTRE|wx.ALL, 5)

        box0 = wx.BoxSizer(wx.HORIZONTAL) 

        box1 = wx.BoxSizer(wx.VERTICAL)        
        box1.Add(t0, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
        box1.Add(t1, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
        box1.Add(t2, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
        box1.Add(t3, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
        box1.Add(t4, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
        
        box2 = wx.BoxSizer(wx.VERTICAL)  
        box2.Add(t10, 1, wx.ALIGN_LEFT|wx.ALL, 1)
        box2.Add(t11, 1, wx.ALIGN_LEFT|wx.ALL, 1)
        box2.Add(t12, 1, wx.ALIGN_LEFT|wx.ALL, 1)
        box2.Add(t13, 1, wx.ALIGN_LEFT|wx.ALL, 1)
        box2.Add(t14, 1, wx.ALIGN_LEFT|wx.ALL, 1)

        box0.Add(box1, 1, wx.ALIGN_CENTRE|wx.ALL, 1)
        box0.Add(box2, 1, wx.ALIGN_CENTRE|wx.ALL, 1)

        sizer.Add(box0, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        

        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_OK,u"OK")
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)

class Dialog_Tirage(wx.Dialog):
    def __init__(
            self, parent, ID, title,joueur, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):

        self.joueur=joueur
        self.parent=parent

        self.numero1=[]
        self.numero2=[]

        pre = wx.PreDialog()
        pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)

        liste=[]
        i=1
        while i<50:
            liste.append(str(i))
            i=i+1
        

        
        t1=wx.StaticText(self, -1, "Premier Tirage")
        self.cl1 = wx.CheckListBox(self, -1, (80, 50), wx.DefaultSize, liste)
        self.cl1.SetHelpText("Sélectionner dans cette liste, les 6 numéros que vous voullez jouer")
        self.info1=wx.StaticText(self, -1, "Vous avez choisi 0 numéro(s) sur 6 pour le premier tirage")
        self.info1.SetHelpText("Une fois que vous aurez sélectionné les 12 numéros (6 par tirage - Il y a 2 tirages donc 2 × 6 = 12), le bouton ''Valider'' s'active")

        t2=wx.StaticText(self, -1, "Deuxième Tirage")
        self.cl2 = wx.CheckListBox(self, -1, (80, 50), wx.DefaultSize, liste)
        self.cl2.SetHelpText("Sélectionner dans cette liste, les 6 numéros que vous voullez jouer")
        
        self.b = wx.Button(self, -1, "Valider")
        self.b.Enable(False)
        self.b.SetHelpText("Jouer au Loto : Regardez le tirage")
        self.b.SetDefault()
        self.info2=wx.StaticText(self, -1, "Vous avez choisi 0 numéro(s) sur 6 pour le second tirage")
        self.info2.SetHelpText("Une fois que vous aurez sélectionné les 12 numéros (6 par tirage - Il y a 2 tirages donc 2×6 = 12), le bouton ''Valider'' s'active")

        line1 = wx.StaticLine(self, -1, size=(-1,-1), style=wx.LI_VERTICAL)

        t3=wx.StaticText(self, -1, "Dans cette simulation, l'ordre n'a pas d'improtance")
        t3.SetHelpText("Normalement il faut les trouver dans le même ordre mais bon, ici ont va faire l'impasse")

        box0 = wx.BoxSizer(wx.HORIZONTAL)
        box1 = wx.BoxSizer(wx.VERTICAL)
        box2 = wx.BoxSizer(wx.VERTICAL)
        
        box1.Add(t1, 0, wx.ALIGN_CENTRE|wx.ALL, 1)
        box1.Add(self.cl1, 0, wx.ALIGN_CENTRE|wx.ALL, 1)
        
        box2.Add(t2, 0, wx.ALIGN_CENTRE|wx.ALL, 1)
        box2.Add(self.cl2, 0, wx.ALIGN_CENTRE|wx.ALL, 1)
        
        box0.Add(box1, 1, wx.ALIGN_LEFT|wx.ALL, 1)
        box0.Add(line1, 1, wx.ALIGN_CENTRE|wx.ALL, 1)
        box0.Add(box2, 1, wx.ALIGN_RIGHT|wx.ALL, 1)

        box = wx.StaticBox(self, -1, u"Information")
        bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
        bsizer.Add(self.info1, 0, wx.CENTER, 10)
        bsizer.Add(self.info2, 0, wx.CENTER, 10)

        sizer.Add(box0, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t3, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(bsizer, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(self.b, 0, wx.ALIGN_CENTRE, 5)
        
        
        self.Bind(wx.EVT_CHECKLISTBOX, self.choix1, self.cl1)
        self.Bind(wx.EVT_CHECKLISTBOX, self.choix2, self.cl2)
        self.Bind(wx.EVT_BUTTON, self.valide, self.b)

        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_CANCEL,u"Annuler")
        btn.SetHelpText("Permet de revenir à la fenêtre principale en quittant cette boite de dialogue")
        

        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 4)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)
        
    def choix1(self, event):
        index = event.GetSelection()
        label = self.cl1.GetString(index)
        if self.cl1.IsChecked(index):
            self.numero1.append(int(label))
        else:
            self.numero1.remove(int(label))
        if len(self.numero1)==6 and len(self.numero2)==6:
            self.b.Enable(True)
        else:
            self.b.Enable(False)
        texte="Vous avez choisi " + str(len(self.numero1)) + " numéro(s) sur 6 pour le premier tirage"
        self.info1.SetLabel(texte)

    def choix2(self, event):
        index = event.GetSelection()
        label = self.cl2.GetString(index)
        if self.cl2.IsChecked(index):
            self.numero2.append(int(label))
        else:
            self.numero2.remove(int(label))
        if len(self.numero1)==6 and len(self.numero2)==6:
            self.b.Enable(True)
        else:
            self.b.Enable(False)
        texte="Vous avez choisi " + str(len(self.numero2)) + " numéro(s) sur 6 pour le second tirage"
        self.info2.SetLabel(texte)

    def valide(self, evt):
        self.Destroy()
        nom='Loto-data\info'+self.joueur
        f=open(nom,'r')
        lignen1=f.readline()
        f.close()
        lignen1=int(lignen1)
        Frame.tirage(self.parent,lignen1,self.numero1,self.numero2,None)

class Dialog_About(wx.Dialog):
    def __init__(
            self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):
        pre = wx.PreDialog()
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)

        bmp = wx.Bitmap("Loto-data\Aeragroup.bmp", wx.BITMAP_TYPE_BMP)
        image=wx.StaticBitmap(self, -1, bmp, (80, 50), (bmp.GetWidth(), bmp.GetHeight()))
        

        textaprop=u"""
À propos de ce programme :
_____________________________

Créé par Aéra Group pour code-SourceS.
Version 1.0 ; Licence : Libre. Vous pouvez modifier ce que vous souhaité."""

        label = wx.StaticText(self, -1, textaprop)
        hyper = hl.HyperLinkCtrl(self, wx.ID_ANY, "Source déposé sur Python-France",
                                        URL="http://www.pythonfrance.com/")
        sizer.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(hyper, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(image, 0, wx.ALIGN_CENTRE|wx.ALL, 5)

        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_OK,u"OK")
        btn.SetDefault()

        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)

class Dialog_Joueur(wx.Dialog):
    def __init__(
            self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):
        pre = wx.PreDialog()
        pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)
        
        text = wx.StaticText(self, -1, "Le choix d'un joueur permet d'enregister les parramètres et les résultats d'un joueur")
        text.SetSize(text.GetBestSize())
        text.SetHelpText("Le joueur doit être déja enregistrer")

        f=open("Loto-data\Utilisateur.txt","r")
        l1=f.readline()
        l1=eval(l1)
        f.close()
        self.joueur=l1[0]
        
        self.ch = wx.Choice(self, -1, (400, 50), choices = l1)
        self.ch.SetSelection(0)
        self.ch.SetHelpText("Permet de sélectionner un joueur déja enregistrer")
        b = wx.Button(self, -1, "Sélectionner ce joueur")
        b.SetHelpText("Valide votre choix")
        b.SetDefault()

        sizer.Add(text, 0, wx.ALIGN_CENTRE|wx.ALL|wx.TOP, 5)
        sizer.Add(self.ch, 10, wx.ALIGN_CENTRE|wx.ALL|wx.GROW, 10)
        sizer.Add(b, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        self.Bind(wx.EVT_CHOICE, self.choix, self.ch)
        self.Bind(wx.EVT_BUTTON, self.valide, b)

        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_CANCEL,u"Annuler")
        btn.SetHelpText("Permet de revenir à la fenêtre principale en quittant cette boite de dialogue")
        

        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)
        
    def choix(self, event):
        self.joueur=event.GetString()

    def valide(self, evt):
        Frame.nom_joueur(frame,self.joueur.encode("windows-1252"))
        self.Destroy()
        dia=wx.MessageDialog(self, "Joueur actuel : " + self.joueur.encode("windows-1252"), caption = u"Confirmation", style = wx.OK|wx.ICON_INFORMATION,
                             pos = wx.DefaultPosition)
        valeur = dia.ShowModal()

class Dialog_Nouveau(wx.Dialog):
    def __init__(
            self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):
        pre = wx.PreDialog()
        pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)
        
        box = wx.BoxSizer(wx.HORIZONTAL)

        label = wx.StaticText(self, -1, "Enter le nom du nouveau joueur")
        label.SetHelpText("Un nouveau joueur permet d'enregistrer son score")
        box.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        self.text = wx.TextCtrl(self, -1, "", size=(180,-1))
        self.text.SetHelpText("Taper ici son nom. N'utilisez pas un nom déja utilisé même en jouant avec les majuscules")
        box.Add(self.text, 1, wx.ALIGN_CENTRE|wx.ALL, 5)

        b = wx.Button(self, -1, "Ajouter ce joueur")
        b.SetHelpText("Ce bouton permet de créé un nouveau joueur")
        b.SetDefault()

        sizer.Add(box, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
        sizer.Add(b, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        self.Bind(wx.EVT_BUTTON, self.valide, b)

        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_CANCEL,u"Fermer cette fenêtre")
        btn.SetHelpText("Permet de revenir à la fenêtre principale en quittant cette boite de dialogue")

        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)

    def valide(self,evt):
        if self.text.GetValue()=="":
            dia=wx.MessageDialog(self, "Vous n'avez rien inscrit dans le champs d'enter", caption = u"Pas de nom", style = wx.OK|wx.ICON_ERROR,
                             pos = wx.DefaultPosition)
            valeur = dia.ShowModal()
        else:
            try:
                f=open("Loto-data\Utilisateur.txt","r")
            except:
                dia=wx.MessageDialog(self, "Une grave erreur s'est produite : il manque le fichier Utilisateur.txt.", caption = u"Erreur", style = wx.OK|wx.ICON_ERROR,
                                 pos = wx.DefaultPosition)
                valeur = dia.ShowModal()
                self.Destroy()
            else:
                l1=f.readline()
                l1=eval(l1)
                f.close()
                i=0
                l2=[]
                while i<len(l1):
                    l2.append(l1[i].lower())
                    i=i+1
                if self.text.GetValue().lower() in l2:
                    dia=wx.MessageDialog(self, "Ce nom existe déja. Chosiser en un autre", caption = u"Nom déja enregister", style = wx.OK|wx.wx.ICON_EXCLAMATION,
                                 pos = wx.DefaultPosition)
                    valeur = dia.ShowModal()
                elif ' \ '.strip() in self.text.GetValue() or ' / '.strip() in self.text.GetValue() or ':' in self.text.GetValue() or '*' in self.text.GetValue() or '?' in self.text.GetValue() or '"' in self.text.GetValue() or '<' in self.text.GetValue() or '>' in self.text.GetValue() or '|' in self.text.GetValue():
                    dia=wx.MessageDialog(self, 'Ce nom comporte un carractère interdit.\nVoici la liste des carractères interdit : / \ : * ? " < > |', caption = u"Carractère interdit", style = wx.OK|wx.wx.ICON_EXCLAMATION,
                                 pos = wx.DefaultPosition)
                    valeur = dia.ShowModal()
                else:
                    l1.append(self.text.GetValue())
                    l1=str(l1)
                    f=open("Loto-data\Utilisateur.txt","w")
                    f.write(l1.encode("windows-1252"))
                    f.close()

                    nom="Loto-data\info"+self.text.GetValue()
                    f=open(nom,"w")
                    f.write('0\n0\n0\n0')
                    f.close()
                    dia=wx.MessageDialog(self, "Le joueur " + self.text.GetValue().encode("windows-1252") + " à bien éait ajouter", caption = u"Confirmation", style = wx.OK|wx.ICON_INFORMATION,
                                 pos = wx.DefaultPosition)
                    valeur = dia.ShowModal()
                    self.text.Clear()
        

class Dialog_Suprime(wx.Dialog):
    def __init__(
            self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):
        pre = wx.PreDialog()
        pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)
        
        text = wx.StaticText(self, -1, "ATTENTION : LA SUPPRESSION EST DÉFINITIVE ET LA RÉCUPÉRATION DES FICHIER SUPPRIMÉ EST IMPOSSIBLE")
        text.SetSize(text.GetBestSize())
        text.SetHelpText("La suppression entraine la destruction des fichiers de sauvegardes")

        f=open("Loto-data\Utilisateur.txt","r")
        l1=f.readline()
        l1=eval(l1)
        f.close()
        self.joueur=l1[0]
        
        self.ch = wx.Choice(self, -1, (400, 50), choices = l1)
        self.ch.SetSelection(0)
        self.ch.SetHelpText("Permet de sélectionner le joueur à supprimer")
        b = wx.Button(self, -1, "Supprimer ce joueur")
        b.SetHelpText("Permet de valider votre choix")

        sizer.Add(text, 0, wx.ALIGN_CENTRE|wx.ALL|wx.TOP, 5)
        sizer.Add(self.ch, 10, wx.ALIGN_CENTRE|wx.ALL|wx.GROW, 10)
        sizer.Add(b, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        self.Bind(wx.EVT_CHOICE, self.choix, self.ch)
        self.Bind(wx.EVT_BUTTON, self.valide, b)

        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_CANCEL,u"Annuler")
        btn.SetHelpText("Permet de revenir à la fenêtre principale en quittant cette boite de dialogue")
        btn.SetDefault()

        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)
        
    def choix(self, event):
        self.joueur = event.GetString()

    def valide(self,evt):
        dia=wx.MessageDialog(self, 'Êtes vous sûr de vouloir supprimer le joueur ' + self.joueur.encode("windows-1252") + ' ?', caption = u"Confirmation", style = wx.YES_NO|wx.NO_DEFAULT|wx.ICON_QUESTION,
                                 pos = wx.DefaultPosition)
        valeur = dia.ShowModal()
        if valeur == wx.ID_YES:
            f=open("Loto-data\Utilisateur.txt","r")
            l1=f.readline()
            l1=eval(l1)
            f.close()
            
            l1.remove(self.joueur)
            
            f=open("Loto-data\Utilisateur.txt","w")
            l1=str(l1).encode("windows-1252")
            f.write(l1)
            f.close()
            
            nom="Loto-data\info"+self.joueur
            try:
                os.remove(nom)
            except:
                pass
            dia=wx.MessageDialog(self, "Le joueur " + self.joueur.encode("windows-1252") + ' a bien été supprimer', caption = u"Confirmation de suppression", style = wx.OK|wx.ICON_INFORMATION,
                                 pos = wx.DefaultPosition)
            valeur = dia.ShowModal()
            
            j=Frame.renvoie_joueur(frame)
            if self.joueur.encode("windows-1252")==j:
                Frame.nom_joueur(frame,'[Pas de joueur sélectionné]')
            self.Destroy()
        else:
            dia=wx.MessageDialog(self, "La procédure de suppression a été annulé", caption = u"Opération annuler", style = wx.OK|wx.ICON_INFORMATION,
                                 pos = wx.DefaultPosition)
            valeur = dia.ShowModal()

class Frame(wx.Frame):
    """Affiche une fenêtre"""
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, size=(800, 700))
        self.SetIcon(wx.Icon("Loto-data\Icone.ico", wx.BITMAP_TYPE_ICO ))
        self.Bind(wx.EVT_CLOSE, self.quitter)

        menuBar = wx.MenuBar()

        menu = wx.Menu()
        menu.Append(11, "Nouveau\tCtrl+N", "Ouvrir une nouvelle fenêtre")
        menu.Append(12, "Effectuer un tirage", "Joué au Loto")
        menu.AppendSeparator()
        menu.Append(13, "Quitter\tAlt-F4", "Quitter le programme")

        joueur = wx.Menu()
        joueur.Append(21, "Choisir un/Changer de joueur", "Chosir un joueur pour l'enregistrement des paramètres")
        joueur.Append(22, "Ajouter un nouveau joueur", "Ajouter un joueur à la base de donnée")
        joueur.Append(23, "Supprimer un joueur", "Supprimer un joueur à la base de donnée ainsi que ses sauvegardes")
        joueur.AppendSeparator()
        joueur.Append(24, "Voir les statistiques de ce joueur", "Voir ne nombre de jeux, de victoires et de défaites")

        aide = wx.Menu()
        aide.Append(31, "Aide\tF1", "Permet d'optenir de l'aide sur le jeu")
        aide.Append(32, "À propos de ...\tF2","Information sur le programme")

        self.Bind(wx.EVT_MENU, self.nouveau, id=11)
        self.Bind(wx.EVT_MENU, self.pre_tirage, id=12)
        self.Bind(wx.EVT_MENU, self.quitter, id=13)
        self.Bind(wx.EVT_MENU, self.definir_joueur, id=21)
        self.Bind(wx.EVT_MENU, self.nouveau_joueur, id=22)
        self.Bind(wx.EVT_MENU, self.supprimer_joueur, id=23)
        self.Bind(wx.EVT_MENU, self.info_joueur, id=24)
        self.Bind(wx.EVT_MENU, self.aide, id=31)
        self.Bind(wx.EVT_MENU, self.about, id=32)
        

        menuBar.Append(menu, "Fichier")
        menuBar.Append(joueur, "Action Joueur")
        menuBar.Append(aide, "Aide")
        self.SetMenuBar(menuBar)

        self.CreateStatusBar()

        self.joueur_actuel='[Pas de joueur sélectionné]'
        self.nb_tirage=0
        

        panel = wx.Panel(self)

        text = wx.StaticText(panel, -1, "Tirage du Loto")
        text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))
        text.SetSize(text.GetBestSize())
        btn = wx.Button(panel, -1, "Quitter")
        funbtn = wx.Button(panel, -1, "Effectuer un tirage")
        self.t = wx.TextCtrl(panel, -1,"",size=(700, 400), style=wx.TE_MULTILINE|wx.TE_READONLY)

        self.Bind(wx.EVT_BUTTON, self.quitter, btn)
        self.Bind(wx.EVT_BUTTON, self.pre_tirage, funbtn)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(text, 0, wx.ALL|wx.CENTER, 10)
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 10)
        sizer.Add(funbtn, 0, wx.ALL|wx.CENTER, 10)
        sizer.Add(self.t, 0, wx.ALL|wx.CENTER, 10)
        panel.SetSizer(sizer)
        panel.Layout()
        self.Center()

        funbtn.SetDefault()

    def quitter(self, evt):
        dlg = wx.MessageDialog(self, 'Êtes vous sûr de voulloir quitter "Le trirage du Loto"' ,'Quitter ce programme', wx.YES_NO|wx.ICON_QUESTION)
        reponse = dlg.ShowModal()
        if reponse==wx.ID_YES:
            self.Destroy()

    def pre_tirage(self,evt):
        if self.joueur_actuel== "[Pas de joueur sélectionné]":
            a=self.definir_joueur(None)
            if a!=wx.ID_CANCEL:                
                dlg = Dialog_Tirage(self, -1, "Sélection des numéros",self.joueur_actuel, size=(350, 200),
                                        style = wx.DEFAULT_DIALOG_STYLE)
                dlg.CenterOnScreen()
                val = dlg.ShowModal()
        else:
            dlg = Dialog_Tirage(self, -1, "Sélection des numéros",self.joueur_actuel, size=(350, 200),
                                    style = wx.DEFAULT_DIALOG_STYLE)
            dlg.CenterOnScreen()
            val = dlg.ShowModal()

    def tirage(self,triche,boules_tire1,boules_tire2,evt=None):
            self.nb_tirage=self.nb_tirage+1
            texte="Boujours est bienvenu au tirage du loto !!!\n\n\nEt voici le premier tirage\n"

            if triche==2:
                    Loto.tirage(boules_tire1)
                    boules_tire11=[]
                    i=0
                    while i<len(boules_tire1):
                        boules_tire11.append(boules_tire1[i])
                        i=i+1
                    del boules_tire1[6:len(boules_tire1)]
                    del boules_tire11[0:6]
            elif triche==1:
                    Loto.tirage(boules_tire1)
                    boules_tire11=boules_tire1
                    del boules_tire11[6:len(boules_tire1)]
            else:
                boules_tire11=[]
                Loto.tirage(boules_tire11)
            
            i=0
            texte1=""            
            while i<len(boules_tire11): 
                if i==len(boules_tire11)-1:
                    texte1=texte1 + " et le numéro complémentaire, le " + str(boules_tire11[i])
                else:
                    texte1=texte1 + " le " + str(boules_tire11[i]) +','
                i=i+1
            texte=texte+"Les numéro gagnant pour ce premier tirage sont le :" + texte1 + "\n\n"

            texte=texte+"Continuons avec le deuxième tirage\n"

            if triche==2:
                    Loto.tirage(boules_tire2)
                    boules_tire22=[]
                    i=0
                    while i<len(boules_tire2):
                        boules_tire22.append(boules_tire2[i])
                        i=i+1
                    del boules_tire2[6:len(boules_tire2)]
                    del boules_tire22[0:6]
            elif triche==1:
                    Loto.tirage(boules_tire2)
                    boules_tire22=boules_tire2
                    del boules_tire22[6:len(boules_tire2)]
            else:
                boules_tire22=[]
                Loto.tirage(boules_tire22)
                    
            i=0
            texte2=""
            while i<len(boules_tire22): 
                if i==len(boules_tire22)-1:
                    texte2=texte2 + " et le numéro complémentaire, le " + str(boules_tire22[i])
                else:
                    texte2=texte2+ " le " + str(boules_tire22[i]) +','
                i=i+1
            texte=texte+"Les numéro gagnant pour ce deuxième tirage sont le :" + texte2 + "\n\n"
            texte=texte+"_______________________________________________________________________________________________________________\n\n"

                       
            self.t.SetInsertionPoint(len(self.t.GetValue())+8*self.nb_tirage)
            self.t.WriteText(texte)

            dlg = Dialog_Compare(self, -1, "Résultat et analyse",boules_tire1,boules_tire11,boules_tire2,boules_tire22,self.joueur_actuel, size=(350, 200),
                                    style = wx.DEFAULT_DIALOG_STYLE)
            dlg.CenterOnScreen()
            val = dlg.ShowModal()
            
        
    def definir_joueur(self, evt):
        try:
            f=open("Loto-data\Utilisateur.txt","r")
            f.close()
        except:
            dia=wx.MessageDialog(self, "Une grave erreur s'est produite : il manque le fichier Utilisateur.txt", caption = u"Erreur", style = wx.OK|wx.ICON_ERROR,
                                 pos = wx.DefaultPosition)
            valeur = dia.ShowModal()
            return wx.ID_CANCEL
        else:
            f=open("Loto-data\Utilisateur.txt","r")
            l1=f.readline()
            f.close()
            if l1=='[]':
                dia=wx.MessageDialog(self, """Il n'y a aucun joueur enregistré.\nPour enregistrer un joueur allez dans le menu "Action Joueur" et "Ajouter un nouveau joueur" """, caption = u"Pas de joueur", style = wx.OK|wx.ICON_INFORMATION,
                                 pos = wx.DefaultPosition)
                valeur = dia.ShowModal()
                return wx.ID_CANCEL
            else:
                dlg = Dialog_Joueur(self, -1, "Sélectionner un joueur", size=(350, 200),
                                 style = wx.DEFAULT_DIALOG_STYLE)
                dlg.CenterOnScreen()
                val = dlg.ShowModal()
                return val

    def nouveau_joueur(self, evt):
        dlg = Dialog_Nouveau(self, -1, "Ajouter un nouveau joueur", size=(350, 200),
                         style = wx.DEFAULT_DIALOG_STYLE)
        dlg.CenterOnScreen()
        val = dlg.ShowModal()

    def supprimer_joueur(self, evt):
        try:
            f=open("Loto-data\Utilisateur.txt","r")
            f.close()
        except:
            dia=wx.MessageDialog(self, "Une grave erreur s'est produite : il manque le fichier Utilisateur.txt", caption = u"Erreur", style = wx.OK|wx.ICON_ERROR,
                                 pos = wx.DefaultPosition)
            valeur = dia.ShowModal()
        else:
            f=open("Loto-data\Utilisateur.txt","r")
            l1=f.readline()
            f.close()
            if l1=='[]':
                dia=wx.MessageDialog(self, """Il n'y a aucun joueur enregistré.\nPour enregistrer un joueur allez dans le menu "Action Joueur" et "Ajouter un nouveau joueur" """, caption = u"Pas de joueur", style = wx.OK|wx.ICON_INFORMATION,
                                 pos = wx.DefaultPosition)
                valeur = dia.ShowModal()
            else:
                dlg = Dialog_Suprime(self, -1, "Supprimer un joueur", size=(350, 200),
                                 style = wx.DEFAULT_DIALOG_STYLE)
                dlg.CenterOnScreen()
                val = dlg.ShowModal()
                
    def aide (self, evt):
        aide = Aide(self,"Aide.htm")
        aide.Show(True)

    def about (self, evt):
        dlg = Dialog_About(self, -1, "À propos de ...", size=(350, 200),
                                 style = wx.DEFAULT_DIALOG_STYLE)
        dlg.CenterOnScreen()
        val = dlg.ShowModal()

    def nom_joueur(self,joueur):
        if joueur == "[Pas de joueur sélectionné]":
            self.SetTitle("Tirage du Loto - [Pas de joueur sélectionné]")
            self.joueur_actuel="[Pas de joueur sélectionné]"
        else :            
            self.SetTitle("Tirage du Loto - [Joueur : " + joueur + "]")
            self.joueur_actuel=joueur

    def renvoie_joueur(self):
        return self.joueur_actuel

    def info_joueur(self,evt):
        if self.joueur_actuel== "[Pas de joueur sélectionné]":
            dia=wx.MessageDialog(self, "Il n'y a pas de joueur sélectionné", caption = u"Information - Pas de joueur sélectionnée", style = wx.OK|wx.ICON_INFORMATION,
                                 pos = wx.DefaultPosition)
            valeur = dia.ShowModal()
        else:
            nom='Loto-data\info'+ self.joueur_actuel
            try :
                f=open(nom,"r")
            except:
                dia=wx.MessageDialog(self, "Une grave erreur s'est produite : il manque un fichier.", caption = u"Erreur", style = wx.OK|wx.ICON_ERROR,
                                 pos = wx.DefaultPosition)
                valeur = dia.ShowModal()
            else:
                f.close()
                dlg = Dialog_InfoJoueur(self, -1, "Information joueur",self.joueur_actuel, size=(350, 200),
                                 style = wx.DEFAULT_DIALOG_STYLE)
                dlg.CenterOnScreen()
                val = dlg.ShowModal()
            
    def nouveau(self,evt):
        frame = Frame(None, "Tirage du Loto - [Pas de joueur sélectionné]")
        frame.Show(True) 

class SplashScreen(wx.SplashScreen):
    def __init__(self):
        bmp = wx.Image("Loto-data\Image.bmp").ConvertToBitmap()
        wx.SplashScreen.__init__(self, bmp,
                                 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
                                 2000, None, -1)
        self.Bind(wx.EVT_CLOSE, self.OnClose)
        self.fc = wx.FutureCall(1500, self.ShowMain)

    def OnClose(self, evt):
        evt.Skip()
        self.Hide()
        if self.fc.IsRunning():
            self.fc.Stop()
            self.ShowMain()

    def ShowMain(self):
        global frame
        frame = Frame(None, "Tirage du Loto - [Pas de joueur sélectionné]")
        frame.Show(True)
        return True

class MyApp(wx.App):
    def OnInit(self):
        splash = SplashScreen()
        splash.Show()
        return True
        
app = MyApp(redirect=True)
app.MainLoop()

Conclusion :


Pour faire fonctionner le code, télécharger le zip et surtout, ne séparé pas "Loto-GUI.pyw" des autres fichiers ou dossier faute de quoi il ne fonctionnera pas ! Normalement le jeu est assez simple, mais j'ai tout de même mis une aide détailé au cas ou !

POUR CEUX QUI DÉSIR TÉLÉCHARGER WX.PYTHON :

Allez sur le site http://www.wxpython.org/download.php et sélectionner la version correspondant à votre version de Python et à votre système d'exploitation.

POUR CEUX QUI DÉSIR TÉLÉCHARGER WINZIP OU WINRAR :

Vous pouvez le télécharger entre autre à cette adresse http://www.clubic.com/telecharger-fiche9488-winzip.html

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
382
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
8 novembre 2010
16
Guillaume06 : Bah oui, une interface bien conçu c'est long à faire !

Corrige ton code sur le faux calcul de fréquence de CPU plutôt !
Messages postés
157
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
25 juillet 2018
4
999 lignes de code pour un "tirage" de nombre aléatoire avec une pauvre interface graphique ?
Messages postés
13
Date d'inscription
mercredi 1 février 2012
Statut
Membre
Dernière intervention
8 février 2012

Salut,
Je vais être franc je ne les pas lutta source car dès que j'ai vue les module que tu importer et qu'il y avait du graphique j'ai même pas chercher a aller plus loin...
Et je tais demander comment tu faisait pour générer un nombre aléatoire car le loto c'est un peu ça ^^ ...car j'ai programmer un petit truc qui pose une question complètement aléatoire qui se trouve dans une liste et ensuite e reprend se nombre aléatoire pour prendre la réponse dans une autre liste(évidement le nombre de la question et de la réponse dans les deux liste correspondent) et puis j'ai ajouté une condition pour la comparaison...pour le nombre aléatoire je me suis servi de random comme module mais a mon avis toi c'est le module Loto (en tout cas sa me paraît logique(tu la écrit indirectement)).

@+
Messages postés
382
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
8 novembre 2010
16
Ce n'est pas un problème de version de Python, mais un problème de module : WxPython. C'est une bibliothèque graphique, qui n'est pas de base dans python. Regarde le cadre "conclusion" pour voir comment l'installer.

Connaitre des systèmes électroniques, c'est commencer à la base ! Actuelement, tu utilse Python sans comprendre ce qui se passe réelement, tu n'as aucune idée de la façon dont Python foncionne principalement parce que tu ne sais pas comment fonctionne un micro processer. En sachant comment cela marche, tu comprends mieux, et donc tu as une vision plus global des choses.
La programmation, c'est l'art d'apprendre à une machine a faire ce que l'on attend d'elle. Ca ne s'apprend pas dans les livres. Je te pose une colle (definition : execice difficile) : comment ferais tu pour créer un logiciel pernettant de créé un emploie du temps des classes d'un Lycée ?
Personnellement j'y ai déjà réfléchis, ca demende une analyse poussé, mais aucune connaissance technique pour établir les grandes lignes ...

Trouver ces solutions n'est pas donné à tous le monde certaines personnes ont un espris plus orienté dans ce sens d'autres préfère étudier Molière ... Comme dirait mon prof, certaine personnes ont "une sorte de 2ème vue parralèle" où le problème se résout de lui même !

Ensuite, pour faire des programme plus poussé, une connaissance d'un pc ou d'un micro est necessaire : je pense à la programmation machine (robotique) ou pour serveur Web.

Inutile de vouloir allez trop vite, cette source demende une connaissance des classes ...
Messages postés
13
Date d'inscription
mercredi 1 février 2012
Statut
Membre
Dernière intervention
8 février 2012

Salut,
J'ai commencer a lire le livre de Gérard Swinnen il y a un petit moment le problème j'ai trop de devoir a ratrapper a cause d'un mauvais prof de math et j'ai la galère des autre devoirs à côtés...
A mon avis je ne peu pas le lire car je n'ait pas la bonne version de python ( moi j'ai 3.0.quelque chose) et il me manque un module :
Traceback (most recent call last):
File "C:\Documents and Settings\Compaq_Propriétaire\Bureau\Loto-GUI.pyw", line 1, in <module>
import wx
ImportError: No module named wx

Je te demander a quel âge tu avais commencer la prog car moi j'ai 14 ans et je commence la prog depuis novembre et python depuis décembre et je me demande a peu près combien de temps il faut pour atteindre un nivo tel que le tient...
Je ne comprend comment tu peu connaitre plus de chose en programmation en apprenant sur les systèmes électronique (?????)
Afficher les 21 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.