IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème avec la sauvegarde du high score


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 3
    Par défaut Problème avec la sauvegarde du high score
    Bonjour,
    comme le titre l'indique j'ai un problème avec la sauvegarde du high socre de mon jeu qui ressemble à un flappy bird.
    J'aimerais sauvegarder mon high score meme quand je quitte le jeu mais je j'y arrive pas car il faut le définit et quand je lui met la valeur 0, a chaque fois que je lance le programme il va revenir a 0.
    Voici mon code actuellement et merci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import pygame
    import time
    from random import *
     
    blue = (113,177,227)
    white = (255,255,255)
    green = (124,252,0)
    red = (255,0,0)
    black = (0,0,0)
     
    pygame.init()
     
    windowW = 700
    windowH = 540
    ballonW = 50
    ballonH = 66
    nuageW = 180
    nuageH = 490
    espace = ballonH*3.5
    nuage_vitesse = 0.8
     
     
    window = pygame.display.set_mode((windowW,windowH))
    pygame.display.set_caption("Ballon Volant")
    horloge =  pygame.time.Clock()
     
    img_ballon = pygame.image.load('avion.png')
    img_nuage01 = pygame.image.load('bin_haut.png')
    img_nuage02 = pygame.image.load('bin_bas.png')
     
    def main():
     
        x_ballon = 50
        y_ballon = 200
     
        y_mouvement=0
     
        espace = ballonH*3
        nuage_vitesse = 10
     
        x_nuage = 1000
        y_nuage = randint(-650,-100)
     
        score_actuel = 0
        high_score_file = open("high_score.txt", "w")
        new_high_score = high_score_file
     
        game_over = False
     
        while not game_over:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    game_over = True
     
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_UP:
                        y_mouvement = -5
     
                if event.type == pygame.KEYUP:
                    y_mouvement = 5
     
            y_ballon += y_mouvement
     
            window.fill(green)
            ballon(x_ballon,y_ballon,img_ballon)
     
            nuages(x_nuage, y_nuage, espace)
            score(score_actuel)
            x_nuage -= nuage_vitesse
     
            if y_ballon>windowH-10 or y_ballon<-0:
                gameOver()
     
            if x_ballon + ballonW > x_nuage + 40:
                if y_ballon<y_nuage + nuageH - 50 :
                    if x_ballon-ballonW < x_nuage + nuageW - 20:
                        gameOver()
     
            if x_ballon + ballonW > x_nuage + 40:
                if y_ballon + ballonH > y_nuage + nuageH + espace + 50:
                    if x_ballon-ballonW < x_nuage + nuageW - 20:
                        gameOver()
     
            if x_nuage <(-1*nuageW):
                x_nuage = windowW
                y_nuage = randint(-300,20)
     
            if x_nuage + nuageW < x_ballon and x_nuage + nuageW + nuage_vitesse >= x_ballon :
                score_actuel += 1
            if new_high_score >= 0:
                police = pygame.font.Font('BradBunR.ttf', 20)
                texte = police.render("High Score : " + str(new_high_score), True, black)
                window.blit(texte, [10,20])
     
     
            pygame.display.update()
            horloge.tick(60)
     
    def gameOver():
        displayGameOver()
        displaySmallText()
        pygame.display.update()
        time.sleep(2)
        while rejoueOuQuitte() == None:
            horloge.tick()
        main()
     
    def rejoueOuQuitte():
        for event in pygame.event.get([pygame.KEYDOWN, pygame.KEYUP, pygame.QUIT]):
            if event.type == pygame.QUIT :
                pygame.quit()
                quit()
            elif event.key ==pygame.KEYUP:
                continue
            return event.key
     
        return None
     
    def ballon(x,y,img):
        window.blit(img, (x,y))
     
    def displayGameOver() :
        police = pygame.font.Font('LemonMilk.otf', 100)
        texte = police.render("Boom!", True, red)
        window.blit(texte, [170,100])    
     
    def displaySmallText() :
        police = pygame.font.Font('Roboto-Thin.ttf', 20)
        texte = police.render("Appuyer sur une touche pour continuer!", True, black)
        window.blit(texte, [170,350])
     
    def nuages(x_nuage, y_nuage, espace):
        window.blit(img_nuage01,(x_nuage,y_nuage))
        window.blit(img_nuage02,(x_nuage,y_nuage + nuageH + espace))
     
    def score(compte):
         police = pygame.font.Font('BradBunR.ttf', 20)
         texte = police.render("Score : " + str(compte), True, black)
         window.blit(texte, [10,0])
     
    def new_high_score():
        new_high_score = 0
        if score_actuel > high_score:
                save_high_score(score_actuel)
     
    def save_high_score(new_high_score):
        try:
            high_score_file = open("high_score.txt", "w")
            high_score_file.write(str(new_high_score))
            high_score_file.close()
        except IOError:
            print("Unable to save the high score.")
     
    main()
    pygame.quit()
    quit()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Lire le contenu d'un fichier s'il existe et le mettre à jour, c'est écrire deux fonctions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def read_highscore(path='highscore.txt'):
          ...
          return highscore
     
    def save_highscore(path='highscore.txt', value=0):
          ....
    qui seront appelées au bon endroit dans votre programme.
    Vous pouvez écrire un petit script pour les mettre au point avant de les intégrer (dans votre code).
    Poster les 150 lignes de votre code ou savoir que votre jeu est un flappy bird n'apporte aucune indication sur les difficultés que vous rencontrez pour écrire ces deux fonctions...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 3
    Par défaut
    C'est vrai que tout poster ne sert à rien mais le problème se trouve partout dans le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     high_score_file = open("high_score.txt", "w")
        new_high_score = high_score_file
    mais c'est surtout à ce niveau là quand il faut que je définisse new_high_score et que si je ne met pas un chiffre il va me dire que il y un problème ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if new_high_score >= 0:
                police = pygame.font.Font('BradBunR.ttf', 20)
                texte = police.render("High Score : " + str(new_high_score), True, black)
                window.blit(texte, [10,20]
    Et je ne veux pas que new_high_score soit égal à 0 quand je lance le jeu mais plutôt soit égal à l'ancienne sauvegarde.
    Merci

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par lopyth Voir le message
    Et je ne veux pas que new_high_score soit égal à 0 quand je lance le jeu mais plutôt soit égal à l'ancienne sauvegarde.
    Et moi je pense que vous avez un problème de conception.
    Dit autrement, celui qui joue réalise un "score" qui ne sera pas toujours plus grand que le meilleur score réalisé lors des parties précédentes. Mais si tel est le cas, "score" deviendra "high_score" et devra être sauvegardé.
    Après "être égal à l'ancienne sauvegarde", c'est ajouter des instructions à une fonction read_highscore(path='highscore.txt') pour pouvoir écrire highscore = read_highscore() qui va lire le fichier (s'il existe) plutôt qu'écrire dedans dans tous les cas.
    note: il faut peut être relire le chapitre sur les fichiers dans votre tuto. préféré?


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Par défaut
    Citation Envoyé par lopyth Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     high_score_file = open("high_score.txt", "w")
        new_high_score = high_score_file
    Bonjour,
    ça ne peut pas marcher car high_score_file ne représente pas un nombre.
    Il faut d'abord définir les 2 fonctions suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def lire():
        fichier=open("high_score.txt", "r")
        high_score=float(fichier.readline())
        fichier.close()
        return high_score
     
    def write(score):
        fichier=open("high_score.txt", "w")
        fichier.write(str(score))
        fichier.close()
    Au début du jeu, il faut lire le score stocké dans le fichier:
    A la fin du jeu il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if score_actuel>high_score:
        write(score_actuel)
    Bon courage !

    (remarque: pour qu'il n'y ait pas d'erreur lors de l'exécution de la fonction lire(), la première fois où le jeu va être exécuté, le mieux est de créer d'abord ce fichier high_score.txt, et d'y placer un 0 sur la première ligne.)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 3
    Par défaut
    Citation Envoyé par racine carrée Voir le message
    Bonjour,
    ça ne peut pas marcher car high_score_file ne représente pas un nombre.
    Il faut d'abord définir les 2 fonctions suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def lire():
        fichier=open("high_score.txt", "r")
        high_score=float(fichier.readline())
        fichier.close()
        return high_score
     
    def write(score):
        fichier=open("high_score.txt", "w")
        fichier.write(str(score))
        fichier.close()
    Au début du jeu, il faut lire le score stocké dans le fichier:
    A la fin du jeu il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if score_actuel>high_score:
        write(score_actuel)
    Bon courage !

    (remarque: pour qu'il n'y ait pas d'erreur lors de l'exécution de la fonction lire(), la première fois où le jeu va être exécuté, le mieux est de créer d'abord ce fichier high_score.txt, et d'y placer un 0 sur la première ligne.)
    Alors là... comment te remercier.
    Ton aide m'a vraiment été précieuse et j'ai pu corriger mon erreur, la sauvegarde marche enfin.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Avec Vista, sauvegarde d'une photo
    Par cincap dans le forum Débuter
    Réponses: 15
    Dernier message: 05/03/2008, 14h23
  2. [C#]Probleme avec la sauvegarde de la configuration
    Par orli1x51 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/06/2006, 14h58
  3. Porblème avec Except
    Par kooljy dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/06/2006, 11h34
  4. Porblème avec Sleep
    Par bengign dans le forum Langage
    Réponses: 3
    Dernier message: 02/01/2006, 12h36
  5. pb avec une sauvegarde sur disquette
    Par kivoch dans le forum Débuter
    Réponses: 5
    Dernier message: 09/01/2005, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo