AttributeError: type object ... has no attribute ...

Résolu
Alan.b Messages postés 1 Date d'inscription jeudi 11 juillet 2024 Statut Membre Dernière intervention 11 juillet 2024 - Modifié le 15 juil. 2024 à 17:14
Whismeril Messages postés 19144 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 septembre 2024 - 12 juil. 2024 à 09:22

Bonjour,

Désolé de vous déranger, je suis un peu perdu, car je débute en programmation. Je regarde actuellement une vidéo pour coder un jeu, mais j'ai un problème quelque part. J'ai recopié exactement ce qui est indiqué dans la vidéo tel quel, mais j'ai un problème à la ligne 33 du programme.

import pygame

pygame.init()

# creer une premiere classe pour le joueur
class player(pygame.sprite.Sprite):
    # sprite = element graphique pouvant se deplacer etc /joueur monstre
    def __init__(self):
         super().__init__()
         self.health = 100
         self.max_health = 100
         self.attack = 10
         self.velocity = 5
         self.image = pygame.image.load('assets/player.png')
         self.rect = self.image.get_rect()


# generer la fenetre de jeu
pygame.display.set_caption("meteor game")
screen = pygame.display.set_mode((1080 ,720))

# importer l'arriere plan du jeu
backround = pygame.image.load("assets/bg.jpg")

# charger notre joueur
running = True


#running true = boucle tant que la condition est vraie
while running:
    screen.blit(player.image, player.rect)

    #appliquer l'arriere plan du jeu
    screen.blit(backround, (0, -200))


    # appliquer l'image du joueur
    screen.blit(player.image, player.rect)


    #mettre a jour l'ecran
    pygame.display.flip()



    # si le joueur ferme cette fenetre
    for event in pygame.event.get():
        # verifier que l'evenement est fermeture de fenetre
     if event.type == pygame.QUIT:
        running = False
        pygame.quit()
        print("fermeture du jeu")

J'ai fait la commande me permettant de faire apparaître mon personnage, mais une fois que je lance le programme, ça me met ce message d'erreur

screen.blit(player.image, player.rect)
            ^^^^^^^^^^^^
AttributeError: type object 'player' has no attribute 'image' 

Si quelqu'un pouvait m'aider rapidement, ça m'aiderait merci beaucoup 

PS: c'est la première fois que je poste, désolé pour la qualité 


Windows / Edge 126.0.0.0


Windows / Edge 126.0.0.0

1 réponse

Bonjour.

Modifie le nom de la classe player en Player (ajout d'une majuscule).

class Player(pygame.sprite.Sprite):
    # sprite = element graphique pouvant se deplacer etc /joueur monstre
    def __init__(self):
         super().__init__()
         self.health = 100
         self.max_health = 100
         self.attack = 10
         self.velocity = 5
         self.image = pygame.image.load('assets/player.png')
         self.rect = self.image.get_rect()

Puis sous la ligne  # charger notre joueur, ajoute :

player = Player()
0
Whismeril Messages postés 19144 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 septembre 2024 919
12 juil. 2024 à 09:22

Bonjour

peut-être expliquer le pourquoi du comment.

Nommer une classe avec une majuscule en premier (Camel Case) fair partie des bonnes pratiques.

Quand à la variable player, comme toute variable en python, tant qu'on ne lui a pas affecté de valeur, python ne sait pas de quel type elle est (en plus de ne pas avoir de valeur).

Et dans ton cas, appeler la classe Player, aurait pu permettre de ne pas la confondre la variable player.

0