Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage a l'infini

Sujet résolu
    6 avril 2020 à 17:49:07

    Bonjour, j'ai commencer une jeu avec un joueur et un projectile sauf que quand je tire, le projectile se duplique a l'infini(pareil pour le monstre), voici le code

    import pygame
    pygame.init()
    from game import Game
    from projectile import Projectile
    
    
    pygame.display.set_caption("Mon premier jeu en python")
    image = pygame.display.set_mode((1080, 720))
    
    game = Game()
    
    en_cours = True
    
    arrire_plan = pygame.image.load('assets/bg.jpg')
    
    
    while en_cours:
    
        image.blit(arrire_plan, (0, -200))
    
        image.blit(game.player.image, game.player.rect)
    
        game.player.all_projectiles.draw(arrire_plan)
    
        game.all_monster.draw(arrire_plan)
    
    for projectile in game.player.all_projectiles:
            projectile.move()
    
    for monster in game.all_monster:
            monster.forward()
    
        pygame.display.flip()
    
    if game.pressed.get(pygame.K_RIGHT) and game.player.rect.x + game.player.rect.width < 1080:
            game.player.move_right()
    elif game.pressed.get(pygame.K_LEFT) and game.player.rect.x > 0:
            game.player.move_left()
    
        pygame.display.flip()
    
    for event in pygame.event.get():
    
    if event.type == pygame.QUIT:
                en_cours = False
    pygame.quit()
    
    elif event.type == pygame.KEYDOWN:
                game.pressed[event.key] = True
    
     if event.key == pygame.K_SPACE:
                    game.player.launch_projectile()
    
    elif event.type == pygame.KEYUP:
                game.pressed[event.key] = False
    class Monster(pygame.sprite.Sprite):
    
    def __init__(self, game):
    super().__init__()
    self.game = game
    self.vie = 100
    self.max_vie = 100
    self.attaque = 5
    self.velocity = 1
    self.image = pygame.image.load('assets/mummy.png')
    self.rect = self.image.get_rect()
    self.rect.x = 1000
    self.rect.y = 740
    
    def forward(self):
    if not self.game.check_collision(self, self.game.all_players):
    self.rect.x -= self.velocity
    class Game:
    
    def __init__(self):
    self.player = Player(self)
    self.all_players = pygame.sprite.Group()
    self.all_players.add(self.player)
    self.all_monster = pygame.sprite.Group()
    self.pressed = {}
    self.spown_monster()
    
    def check_collision(self, sprite, group):
    return pygame.sprite.spritecollide(sprite, group, False, pygame.sprite.collide_mask)
    
    def spown_monster(self):
    self.all_monster.add(Monster(self))
    class Player(pygame.sprite.Sprite):
    
    def __init__(self, game):
    super().__init__()
    self.game = game
    self.image = pygame.image.load('assets/player.png')
    self.rect = self.image.get_rect()
    self.vie = 100
    self.vie_max = 100
    self.attaque = 10
    self.vit_deplace_right = 2.5
    self.vit_deplace_left = 2
    self.all_projectiles = pygame.sprite.Group()
    self.rect.x = 400
    self.rect.y = 500
    
    def launch_projectile(self):
    self.all_projectiles.add(Projectile(self))
    
    def move_right(self):
    if not self.game.check_collision(self, self.game.all_monster):
    self.rect.x += self.vit_deplace_right
    
    def move_left(self):
    if not self.game.check_collision(self, self.game.all_monster):
    self.rect.x -= self.vit_deplace_left
    class Projectile (pygame.sprite.Sprite):
    
    def __init__(self, player):
    super().__init__()
    self.velocyti = 3.5
    self.player = player
    self.image = pygame.image.load('assets/projectile.png')
    self.image = pygame.transform.scale(self.image, (50, 50))
    self.rect = self.image.get_rect()
    self.rect.x = player.rect.x + 120
    self.rect.y = player.rect.y + 280
    self.image_origin = self.image
    self.rotate = 0
    self.transform_rotate = 8
    
    def movere(self):
    if self.rect.x > 1080:
    self.player.all_projectiles.remove(self)
    
    def move(self):
    self.rect.x += self.velocyti
    self.rotate += self.transform_rotate
    self.image = pygame.transform.rotozoom(self.image_origin, self.rotate, 1)
    self.rect = self.image.get_rect(center=self.rect.center)
    self.movere()
    
    if self.player.game.check_collision(self, self.player.game.all_monster):
    self.player.all_projectiles.remove(self)

    quelqu'un peut m'aider et me dire quelle est le code pour recoller toute les images en une seul puis rafraichir l'image ?

    PS: j'ai place ces scripts dans différent fichier python donc il n'y a pas vraiment d'ordre(dans les deux sens)

    -
    Edité par PylouFace 7 avril 2020 à 14:44:02

    • Partager sur Facebook
    • Partager sur Twitter
      6 avril 2020 à 17:52:21

      Bonjour et merci de suivre à la lettre ce lien,
      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        6 avril 2020 à 19:28:39

        Bonjour,

        Merci de colorer votre code à l'aide du bouton Code

        Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: python;">Votre code ici</pre>.

        Merci de modifier votre message d'origine en fonction.

        • Partager sur Facebook
        • Partager sur Twitter

        Pas d'aide concernant le code par MP, le forum est là pour ça :)

          7 avril 2020 à 17:10:26

          Merci d'avoir édité ton topic mais le code est mal formaté, l'indentation n'est pas représentée correctement.

          Et tu n'as pas suivi l'ensemble des indications de mon lien.

          • Partager sur Facebook
          • Partager sur Twitter

          Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
          La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

          Affichage a l'infini

          × 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