Partage
  • Partager sur Facebook
  • Partager sur Twitter

Gestion des high score

gérer des highs score

    22 novembre 2010 à 16:26:03

    Bonjour a tous,

    Je suis en pleine formation python, et je me crée un jeux plutot basique, bon pour le fonctionnement, je n'ai aucun soucis, mais j'aimerai rajouter une fonction qui gère les highs scores.
    Le jeux est en gros un jeux du plus ou moins.

    Au début du jeux, il demande donc le nom du joueur, que j'enregistre dans une variable.
    J'aimerai pouvoir sauvegarder le resultat dans un fichier, pour le moment il se sauvegarde dans le style :
    Name = Score

    Mais j'aimerai pouvoir reprendre ce score pour l'afficher dans l'ordre du meilleur au plus nul. l'enregistrer dans un autre fichier pour faire une moyenne en pourcents de tous les jeux deja fait.

    Par exemple dons mon highscore.txt j'ai :
    toto = 90
    titi = 50
    tata = 75
    tutu = 95

    Pour aujourd'hui voila les joueurs, j'aimerai deja pouvoir trier cela, mais comment ?

    ensuite si demain je rejoue, j'aimerai pouvoir donc creer une moyenne de mes precedentes partie, avec celle du jour, mais aussi, comment faire ?

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      22 novembre 2010 à 17:29:38

      A mon avis, ce serait pus simple de faire un dossier "Highscores" où tu mets plusieurs fichiers "toto.txt" ; "tit.txt", ça serait plus simple, pour faire les moyennes et compter, sinon, je ne sais pas comment faire.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        22 novembre 2010 à 18:21:20

        Avec les dictionnaires tu devrais pouvoir t'en sortir.
        • Partager sur Facebook
        • Partager sur Twitter
          22 novembre 2010 à 19:02:36

          def trier_topscores(fichier):
              with f as open(fichier, 'r'):
                  foo = f.readlines()
                  foo.sort(key=lambda a:a.split('=')[1])
              return foo
          
          moyenne = lambda a: sum(a)/len(a)
          

          Simple comme bonjour.
          • Partager sur Facebook
          • Partager sur Twitter
          yjltg.
            22 novembre 2010 à 19:38:01

            Merci beaucoup, mais a quoi correspond se lambda, de nom je dirais que sa veux dire que l'on ne connais pas le nom de la clé, mais je suis pas sur.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              22 novembre 2010 à 20:44:11

              Citation

              Avec les dictionnaires tu devrais pouvoir t'en sortir.



              +1 et le module pickle
              • Partager sur Facebook
              • Partager sur Twitter
                22 novembre 2010 à 23:08:55

                Citation : fred1599

                Citation

                Avec les dictionnaires tu devrais pouvoir t'en sortir.



                +1 et le module pickle


                Ce qui est dommage avec le module pickle, c'est que c'est relativement illisible par autre chose que Python.
                Autant utiliser un simple format texte comme celui donné par l'OP, ou mieux encore, un truc standard genre XML.

                Citation : meheu

                Merci beaucoup, mais a quoi correspond se lambda, de nom je dirais que sa veux dire que l'on ne connais pas le nom de la clé, mais je suis pas sur.


                Non, du tout. Comme disait Plug'n'Play 512, c'est une fonction anonyme. Un genre de fonction en simplifié, en fait.
                • Partager sur Facebook
                • Partager sur Twitter
                yjltg.
                Anonyme
                  22 novembre 2010 à 23:48:58

                  Citation : quelqun_dautre

                  Simple comme bonjour.


                  Il y a deux erreurs dans ton exemple... :-°

                  ...lignes 2 et 5...

                  Quand c'est trop simple, on prend pas la peine de relire. Mais c'est toujours là que les erreurs d'inattention se pointent. ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    23 novembre 2010 à 9:15:43

                    Citation

                    Ce qui est dommage avec le module pickle, c'est que c'est relativement illisible par autre chose que Python.



                    Hum... Je pense que tu devrais relativiser. Il me semble que son utilisation soit restreinte au langage python.

                    Mieux que pickle il y a cpickle, mais le principe est le même.

                    Il permet entre autres d'enregistrer et de récupérer sans prévoir de code à cet effet.

                    La doc en français

                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 novembre 2010 à 9:57:53

                      Un exemple sur l'utilisation d'un dictionnaire (tu peux mettre tes dicos en mémoire avec shelve ou (c)pickle comme cité au-dessus), je suis pas très bon en Python alors y'a sûrement mieux :

                      >>> mydict = {'Toto':90, 'Titi':50, 'Tata':75, 'Tutu':95}
                      >>> sorted(mydict, key=lambda x: mydict[x], reverse=True)
                      ['Tutu', 'Toto', 'Tata', 'Titi']
                      >>> [(i, n) for i, n in mydict.items() if mydict[i] == max(mydict.values())]
                      [('Tutu', 95)]
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 novembre 2010 à 11:19:02

                        Il y a pas longtemps j'ai créer une classe score pour un jeu, je te la poste tel quel, je ne dis pas qu'elle est parfaite loin de là

                        elle permet de:
                        - ouvrir un dictionnaire existant, au pire de le créer
                        - sauvegarder le dictionnaire avec les nouveaux scores
                        - rechercher le nom d'un joueur et en extraire le score et si il n'existe pas, créer le joueur avec 0 points
                        - afficher le score des joueurs dans un ordre décroissant
                        - affecter un nouveau score a un joueur

                        import pickle
                        
                        class Score(object):
                            """Gère les scores des Joueurs en fonction de leur nom"""
                            def __init__(self):
                                "Initialisation du dictionnaire de scores"
                                try:
                                    fichier = open("scores.bin", "rb")
                                    self.scores = pickle.load(fichier)
                                    fichier.close()
                                except IOError:
                                    self.scores = {}
                                
                        
                            def sauver(self):
                                "Sauvegarde du dictionnaire dans un fichier bin"
                                fichier = open("scores.bin", "wb")
                                pickle.dump(self.scores, fichier)
                                fichier.close()
                        
                            def recherche(self, nom):
                                "Recherche le score du joueur et au besoins le crée"
                                if nom in self.scores:
                                    self.joueur = [nom, self.scores[nom]]
                                else:
                                    self.scores[nom] = (0, 0)
                                    self.joueur = [nom, self.scores[nom]]
                                return self.joueur
                        
                            def affiche(self):
                                "Affiche les scores par ordre décroissants"
                                ordre = []
                                noms = list(self.scores.keys())
                                valeurs = tuple(self.scores.values())
                                for n in range(len(noms)):
                                    ordre.append([valeurs[n], noms[n]])
                                    ordre.sort()
                                    ordre.reverse()
                                for ele in ordre:
                                    print("{} a un score de {} point(s) pour {} mot(s) trouvé(s)".format
                                          (ele[1], ele[0][0], ele[0][1]))
                        
                            def incremente(self, nom, score):
                                "Actualise le score du joueur dès qu'il finit une partie"
                                if nom in self.scores:
                                    self.scores[nom] = score
                        


                        Il n'y a qu'a l'adapter en fonction de ce que tu veut en faire.

                        @ +++
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 novembre 2010 à 18:05:56

                          Ce ne sont pas des triple guillemets (""") qu'il faut mettre pour la documentation d'un classe ou d'un fonction au lieu des guillemets simples (") ? Enfin je dis ça je dis rien... :-°
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 novembre 2010 à 18:44:13

                            Citation : darkeyes

                            Ce ne sont pas des triple guillemets (""") qu'il faut mettre pour la documentation d'un classe ou d'un fonction au lieu des guillemets simples (") ? Enfin je dis ça je dis rien... :-°



                            Sauf erreur de ma part les """ servent a mettre un commentaire sur plusieurs lignes

                            en essayant sur la console la doc de ma classe s'affiche correctement comme ça

                            >>> Score.__doc__
                            'Gère les scores des Joueurs en fonction de leur nom'
                            >>> Score.affiche.__doc__
                            'Affiche les scores par ordre décroissants'
                            >>>
                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 novembre 2010 à 18:48:06

                              Citation : darkeyes

                              Ce ne sont pas des triple guillemets (""") qu'il faut mettre pour la documentation d'un classe ou d'un fonction au lieu des guillemets simples (") ? Enfin je dis ça je dis rien... :-°



                              Non. Mais c'est bien les commentaires utilisant des triples guillemets qui sont conformes à la PEP-8.
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                23 novembre 2010 à 18:54:13

                                Citation

                                Non. Mais c'est bien les commentaires utilisant des triples guillemets qui sont conformes à la PEP-8.



                                Ce n'est pas la PEP 8 mais la PEP 257
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 novembre 2010 à 19:25:05

                                  Citation : fred1599

                                  Citation

                                  Non. Mais c'est bien les commentaires utilisant des triples guillemets qui sont conformes à la PEP-8.



                                  Ce n'est pas la PEP 8 mais la PEP 257



                                  ça pose un probleme de compatibilité ou c'est une convention ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    23 novembre 2010 à 19:51:30

                                    Citation

                                    ça pose un probleme de compatibilité ou c'est une convention ?



                                    Comme tout ce qui vient d'une PEP c'est à suivre. Je verrais ça plus comme une convention un peu comme self (pas obligatoire mais fortement conseillé pour le bien des lecteurs).
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Gestion des high score

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown