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 :

Python message d'erreur


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Décembre 2017
    Messages : 1
    Par défaut Python message d'erreur
    Bonjour à tous,
    je suis nouveau en programmation, j'ai donc suivi un tutoriel pour essayer de programmer un petit jeu néanmoins je me heurte a une erreur que je ne comprends pas. Pouvez-vous m'éclairer ?
    je tiens a vous précisé que l'erreur vient depuis que j'ai ajouter la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        if self.player.game.check_collision(self, self.player.game.all_players):
                #si on touche le monstre on supp
                self.remove()
    sans cette ligne le jeu fonctionne

    Merci par avance a toutes les personnes qui vont essayer de m'aider !

    erreur :

    AttributeError: 'Player' object has no attribute 'game'


    CODE main.py :

    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
    import pygame
    from player import Player
    from game import Game
     
     
    pygame.init() #generer la fenetre du jeu 
    pygame.display.set_caption("j'apprends a programmer")
    screen = pygame.display.set_mode((1600, 900))
     
    background = pygame.image.load('PygameAssets-main/bg.jpg')
     
    #charger img  joueur
    player = Player()
    game = Game()
    running = True
     
    while(running):
        #applique l'arrire plan
        screen.blit(background, (0, 0))
        #applique img joueur
        screen.blit(game.player.image,game.player.rect)
     
        #recup les projectiles du joueur
        for projectile in game.player.all_projectiles:
            projectile.movedroit()
     
        for monster in game.all_monsters:
            monster.avancer()
     
     
        #appliquer le groupe de projectile ( LE DESSINE )
        game.player.all_projectiles.draw(screen)
     
        #appliquer l'ensemble de groupe d'image monster
        game.all_monsters.draw(screen)
     
     
     
     
        if game.pressed.get(pygame.K_RIGHT) and game.player.rect.x < 1500:
            game.player.move_right()
        elif game.pressed.get(pygame.K_LEFT) and game.player.rect.x > -70:
            game.player.move_left()
     
        #maj de l'image
        pygame.display.flip()
        #si je ferme la fenetre
        for event in pygame.event.get():
            #verif levent
            if event.type == pygame.QUIT:
                running = False
                pygame.quit()
                print("FIN")
     
            elif event.type == pygame.KEYDOWN:
                game.pressed[event.key] = True
     
                #espace pour tirer
                if event.key == pygame.K_1:
                    game.player.launch_projectile()
     
                elif event.key == pygame.K_2:
                    game.player.launch_projectile()
     
            elif event.type == pygame.KEYUP:
                game.pressed[event.key] = False
     
        print(game.player.rect)

    CODE projectile.py :

    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
    import pygame
     
    #def class pour le projectile
     
    class Projectile(pygame.sprite.Sprite):
        #def constructeur
        def __init__(self, player):
     
     
            super().__init__()
            self.velocity = 1
            self.player = player
            self.image = pygame.image.load('PygameAssets-main/projectile.png')
            self.image = pygame.transform.scale(self.image, (25, 25))
            self.rect = self.image.get_rect()
            self.rect.x = player.rect.x + 100 
            self.rect.y = player.rect.y + 50
            self.origin_image = self.image
            self.angle = 0
     
     
        def rotate(self):
            #tourne la crotte de nez
            self.angle += 1
            self.image = pygame.transform.rotozoom(self.origin_image, self.angle, 1)
            self.rect = self.image.get_rect(center=self.rect.center)
     
     
        def remove(self):
            # efface le projectile
            self.player.all_projectiles.remove(self)
     
     
        def movedroit(self):
            self.rect.x += self.velocity
     
            self.rotate()
            #verif si on touche le monstre
            if self.player.game.check_collision(self, self.player.game.all_players):
                #si on touche le monstre on supp
                self.remove()
     
            #enlever le projectile qd il sort de l'écran
            if self.rect.x > 1700:
                self.remove()
     
     
        def movegauche(self):
            self.rect.x -= self.velocity

    CODE game.py :

    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
    import pygame
    from player import Player
    from monster import Monster
    from projectile import Projectile
    class Game:
     
        def __init__(self):
     
            #generer joueur ds la parti
            self.all_players = pygame.sprite.Group
            self.player = Player()
            self.all_players.add(self.player)
            #groupe de monster
            self.all_monsters = pygame.sprite.Group()
            self.pressed = {}
            self.spawn_monster()
     
        def check_collision(self, sprite, group):
            return pygame.sprite.spritecollide(sprite, group, False, pygame.sprite.collide_mask)
     
     
        def spawn_monster(self):
            monster = Monster(self)
            self.all_monsters.add(monster)

    CODE player.py :

    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
    import pygame
    from projectile import Projectile
    class Player(pygame.sprite.Sprite):
        def __init__(self):
            super().__init__()
            self.health = 100
            self.max_health = 100
            self.attack = 25
            self.velocity = 1
            self.all_projectiles = pygame.sprite.Group() #range les projectiles dans ce groupe
            self.image = pygame.image.load('PygameAssets-main/player.png')
            self.rect = self.image.get_rect()
            self.rect.x = 400
            self.rect.y = 450
     
        def move_right(self):
            self.rect.x += self.velocity
     
        def move_left(self):
            self.rect.x -= self.velocity
     
        def launch_projectile(self):
            #créer une intance de la classe projectile
            #projectile = Projectile()
            self.all_projectiles.add(Projectile(self))


    CODE monster.py :


    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
    import pygame
    from player import Player
    from projectile import Projectile
     
     
    class Monster(pygame.sprite.Sprite):
        def __init__(self, game):
            super().__init__()
            self.game = game
            self.health = 100
            self.max_health = 100
            self.attack = 5
            self.image = pygame.image.load('PygameAssets-main/mummy.png')
            self.rect = self.image.get_rect()
            self.rect.x = 1500
            self.rect.y = 420
            self.velocity = 1
     
        def avancer(self):
            #if not self.game.check_collision(self, self.game.all_players):
            self.rect.x -= self.velocity

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Si Player n'a pas d'attribut "game", écrire Player.game n'a pas de sens (et de toute façon, comme Python ne sait pas quoi faire dans ce cas, il ne peut que lever une exception et le programme s'arrête).

    Si vous aviez ouvert un tuto. pour apprendre les bases sur les classes, vous auriez rencontré ce message d'erreur en essayant de faire quelques uns des exercices proposés...
    Et savoir que vous ne pouvez pas écrire des trucs approximatifs en espérant que ça marche.

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

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par xLouDM Voir le message
    Pouvez-vous m'éclairer ?
    Il faut apprendre
    • les classes
    • les attributs
    • les méthodes


    Si j'écris
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class cToto:
    	def __init__(self):
    		self.x=1
    		self.y=2
    	# __init__()
    # class cToto
     
    var=cToto()
    Je peux taper dans var.x ou var.y mais pas dans var.autre_chose car l'attribut "autre_chose" n'existe pas dans la classe.

    Citation Envoyé par xLouDM Voir le message
    je suis nouveau en programmation
    Hé oui. En prog comme pour le reste faut apprendre à marcher avant de vouloir voler. T'es technicien réseau, tu as dû apprendre les masques avant de savoir faire communiquer l'adresse 10.0.0.1 avec l'adresse 10.0.10.1. Là c'est pareil. Avant de vouloir programmer un jeu et toutes les intéractions qu'il peut y avoir entre le joueur, le projectile, le terrain, etc on commence simple.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Python 3 absence de message d'erreur
    Par jam7575 dans le forum Général Python
    Réponses: 9
    Dernier message: 26/01/2021, 14h29
  2. demande explication sur un message d'erreur, en python débutant
    Par amateurprg dans le forum Général Python
    Réponses: 21
    Dernier message: 09/11/2019, 19h30
  3. message d'erreur python
    Par joe1987 dans le forum Général Python
    Réponses: 4
    Dernier message: 24/10/2019, 13h42
  4. Réponses: 0
    Dernier message: 21/03/2014, 11h16
  5. Message d'erreur en python que je voudrais comprendre
    Par comme de bien entendu dans le forum Général Python
    Réponses: 3
    Dernier message: 20/08/2013, 10h14

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