Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Pygame] Projet Flappy Bird

    17 avril 2016 à 22:35:19

    Bonsoir à tous, je suis actuellement en train de réaliser mon projet d'ISN de Terminale et je rencontre quelques difficultés :/

    Tout d'abord voici mon programme:

    import pygame
    from pygame.locals import * #Importation des bibliothèques
    import random
    import time
    
    pygame.init()
    
    Lfenetre = 1200        
    Hfenetre = 600
    
    fenetre = pygame.display.set_mode((Lfenetre, Hfenetre), RESIZABLE) #Création d'un écran d'une résolution de 1024*768 pixels
    
    fond_original = pygame.image.load("fond.png").convert() #Mise en place du fond d'écran
    fond = pygame.transform.scale(fond_original,(Lfenetre,Hfenetre)) #Redimensionnage de l'image
    
    bird = pygame.image.load("flappy.png").convert() #Affichage de l'image de l'oiseau
    bird = pygame.transform.scale(bird,(125,125))    #Redimensionnage de l'image
    bird.set_colorkey((255,255,255))                          #avec disparition du fond de cette image (blanc)
    
    poteau = pygame.image.load("poteau.png").convert()
    poteau = pygame.transform.scale(poteau,(70,500))
    poteau.set_colorkey((255,255,255))
    
    poteau2 = pygame.image.load("poteau2.png").convert()
    poteau2 = pygame.transform.scale(poteau2,(70,500))
    poteau2.set_colorkey((255,255,255))
    
    horloge = pygame.time.Clock()
    
    pygame.display.set_caption("Flappy Bird")  #Nom de la fenêtre
    
    musique = pygame.mixer.music.load("killer.mp3")
    
    
    def messageGO():
       Police = pygame.font.Font("LazySpringDay.ttf", 100)     #Choix de la police et de la taille du texte
       Rendu = Police.render("Game Over",1,(0,0,0))            #Rendu du texte (nom du message, Code RGB)
       fenetre.blit(Rendu, (Lfenetre/4, Hfenetre/4))
    
    def message_rejouer():
       Police = pygame.font.Font("LazySpringDay.ttf", 50)
       Rendu = Police.render('Appuyer sur "r" pour rejouer',1,(0,0,0))
       fenetre.blit(Rendu, (Lfenetre/4, Hfenetre/2+200))
    
    def gameover():
       messageGO()
       message_rejouer()
       pygame.display.flip()
       while rejouer_ou_quitter() == None:              #Si la fonction ne renvoie rien alors
          horloge.tick()                                #l'écran reste figé sur le message du GameOver
       principale()
    
    def rejouer_ou_quitter():
       for event in pygame.event.get([KEYDOWN, QUIT]):              #Pour tous les évènements parmi [...]
          if event.type == QUIT:                                    #Si l'évènement est de type quitter alors on arrête le programme
             pygame.quit()
             quit()                 
          elif event.key == K_r:                                    #Si l'évènement est l'appui sur la touche "r" on renvoie un évènement clé
                return event.key
       return None                                                  #Sinon la fonction ne renvoie rien
                
             
    def principale():      
       x = 100                          #Position de l'oiseau
       y = 100                          
       y_move = 0                       #Mouvement de l'oiseau
    
       i = 1000                         #Position du poteau
       j = random.randint(210,450)      
    
       j2 = j-700                       #Position du poteau2 (à l'envers)
    
    
       pygame.mixer.music.play()
       
       continuer = 1
       while continuer == 1:
         for event in pygame.event.get():
           if event.type == QUIT:
             continuer = 0
           if event.type == KEYDOWN and event.key == K_SPACE:
             y_move = -1
           if event.type == KEYUP and event.key == K_SPACE:
             y_move = 1
              
         y += y_move
            
         
         fenetre.blit (fond, (0,0))
         fenetre.blit (bird, (x,y))
         fenetre.blit (poteau, (i,j))
         fenetre.blit (poteau2, (i,j2))
    
         if y>400:
            pygame.mixer.music.stop()
            gameover()
            
         pygame.display.flip()
         
    principale()
    pygame.quit()
    quit()





    Tout d'abord j'ai un problème quand je veux redimensionner la taille de l'écran en cours de jeu. En effet quand "j'étire" une partie de l'écran ou que je met le jeu en plein écran une partie de l'écran est noire. J'ai inclus l'outil RESIZABLE mais cela ne change rien...

    Aussi quand l'oiseau touche le sol et que la fonction gameover se lance tout va bien: l'écran se fige et si j'appuie sur "r" le jeu se relance et si j'appuie sur d'autres touches rien ne se passe. Cependant si pendant le gameover j'appuie sur la touche espace puis que j'appuie sur la touche "r" alors quand le jeu se relance le flappy se met à tomber directement :/

    Si quelqu'un pouvait m'aider ce serait super sympa :)

    Voici les fichiers pour ceux qui voudraient tester le programme:

    Fond

    Oiseau

    Tuyau

    Tuyau 2

    Police

    Musique

    Merci d'avance pour votre aide :)



    -
    Edité par KossaThomas 17 avril 2016 à 22:44:49

    • Partager sur Facebook
    • Partager sur Twitter
      17 avril 2016 à 23:00:07

      ajoute ligne 75 puisqu'elle est vide : pygame.event.clear()

      RESIZABLE c'est pas magique ... tu voudrais que ça fasse quoi quand tu redimensionnes ?

      -
      Edité par josmiley 17 avril 2016 à 23:02:02

      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        17 avril 2016 à 23:05:49

        Merci beaucoup ça marche tout de suite beaucoup mieux ^^

        Concrètement j'aimerais que la taille du fond s'adapte à la taille de l'écran

        • Partager sur Facebook
        • Partager sur Twitter
          17 avril 2016 à 23:59:20

          mais les obstacles t'en fais quoi, ils grandissent aussi, tout doit être proportionnel ?
          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            18 avril 2016 à 9:05:25

            Oui les obstacles ainsi que l'oiseau doivent s’agrandir proportionnellement à la fenêtre
            • Partager sur Facebook
            • Partager sur Twitter
              18 avril 2016 à 11:06:50

              ben faut redimensionner aussi toutes les images en proportion et recalculer les positions des objets.
              • Partager sur Facebook
              • Partager sur Twitter

              Python c'est bon, mangez-en. 

                18 avril 2016 à 19:09:58

                Ok mais comment je procède? Avec des get.rect?
                • Partager sur Facebook
                • Partager sur Twitter

                [Pygame] Projet Flappy Bird

                × 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