Erreur 'pressed' n'est pas attribuer à 'Game'
Résolu/Fermé
A voir également:
- Erreur 'pressed' n'est pas attribuer à 'Game'
- Erreur 0x80070643 - Guide
- Zuma game - Télécharger - Jeux vidéo
- Une erreur s'est produite youtube ✓ - Forum YouTube
- Dans la table des matières de ce document, le chapitre 6 et ses 2 sections n'apparaissent pas. trouvez l'erreur dans la structure du document et corrigez-la. mettez à jour la table des matières. quel est le mot formé par les lettres en majuscules de la table des matières après sa mise à jour ? - Forum Word
- Code erreur f3500-32 ✓ - Forum Bbox Bouygues
5 réponses
Bonsoir,
Game est une classe qui contient la méthode __init__
Tu as simplement mal compris comment cela fonctionne, une classe, généralement, on l'instancie afin d'obtenir un objet, d'autant plus lorsque des attributs sont déclarés lors de cette instance.
Donc, il faudrait d'abord faire au préalable
Game est une classe qui contient la méthode __init__
Tu as simplement mal compris comment cela fonctionne, une classe, généralement, on l'instancie afin d'obtenir un objet, d'autant plus lorsque des attributs sont déclarés lors de cette instance.
Donc, il faudrait d'abord faire au préalable
game = Game()par exemple à la suite de
Player = Player(), d'ailleurs attention ici, car tu écrases ta classe Player, il faudrait revoir ça en faisant
player = Player(), et enfin changer Game par game
elif event.type == pygame.KEYDOWN: game.pressed[event.key] = True elif event.type == pygame.KEYUP: game.pressed[event.key] = False
Premièrement merci à vous deux @george97 et @stoic,
Vous m'avez aidé à comprendre un peu mieux comment marche pygame et python MAIS comme je suis un véritable boulet :
J'ai essayé de continuer et la console m'affiche ENCORE une erreur :
Traceback (most recent call last):
File "main.py", line 31, in <module>
Player.move_left()
AttributeError: type object 'Player' has no attribute 'move_left'
Le code du fichier main :
Et celui du fichier Player :
Encore merci,
Moi-même
Vous m'avez aidé à comprendre un peu mieux comment marche pygame et python MAIS comme je suis un véritable boulet :
J'ai essayé de continuer et la console m'affiche ENCORE une erreur :
Traceback (most recent call last):
File "main.py", line 31, in <module>
Player.move_left()
AttributeError: type object 'Player' has no attribute 'move_left'
Le code du fichier main :
import pygame pygame.init() class Game: def __init__(self): self.pressed = {} from Player import Player pygame.display.set_caption("jeu") screen = pygame.display.set_mode((1080, 720)) running = True print("Programme démaré") background = pygame.image.load('sprite/BG.png') player = Player() game = Game() while running: screen.blit(background, (0, 100)) screen.blit(player.image, player.rect) if game.pressed.get(pygame.K_RIGHT): Player.move_right() elif game.pressed.get(pygame.K_LEFT): Player.move_left() pygame.display.flip() for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: game.pressed[event.key] = True elif event.type == pygame.KEYUP: game.pressed[event.key] = False
Et celui du fichier Player :
import pygame pygame.init() class Player(pygame.sprite.Sprite): def __init__(self): self.image = pygame.image.load('sprite/Player.png') self.health = 100 self.max_health = 100 self.attack = 10 self.velocity = 10 self.rect = self.image.get_rect() self.rect.y = 275 def move_right(self): self.rect.x += self.velocity def move_left(self): self.rect.x -= self.velocity
Encore merci,
Moi-même
georges97
Messages postés
11829
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
20 avril 2024
2 248
Modifié le 7 juil. 2021 à 12:19
Modifié le 7 juil. 2021 à 12:19
soic m'excusera de tenter:
dans les attributs de la classe Player() ne figure pas, à l'instar de self.rect.y=275 (ligne 14) de self.rect.x... qui dit initialiser la propriété. Cela pourrait explique qu'une propriété non-initialisée provoque une erreur.
Ce que je voulais surtout vous dire, Vieux_hibou, c'est qu'il ne faut surtout pas vous sous-estimer ou même vous comparer. Je souscris au jugement parfois émis qui considère que la moitié de la programmation est matière de débogage, même chez les plus doués. Après, c'est une question de logique, et de persévérance à nettoyer son code.
Je dirais même que c'est la parie la plus jouissive du code (quand on trouve bien sûr, pas quand on reste bloqué).
Par ailleurs, les classes ne sont pas la partie la plus simple de ce langage. Certains n'y accéderont jamais. Vous êtes donc sur la bonne voie.
dans les attributs de la classe Player() ne figure pas, à l'instar de self.rect.y=275 (ligne 14) de self.rect.x... qui dit initialiser la propriété. Cela pourrait explique qu'une propriété non-initialisée provoque une erreur.
Ce que je voulais surtout vous dire, Vieux_hibou, c'est qu'il ne faut surtout pas vous sous-estimer ou même vous comparer. Je souscris au jugement parfois émis qui considère que la moitié de la programmation est matière de débogage, même chez les plus doués. Après, c'est une question de logique, et de persévérance à nettoyer son code.
Je dirais même que c'est la parie la plus jouissive du code (quand on trouve bien sûr, pas quand on reste bloqué).
Par ailleurs, les classes ne sont pas la partie la plus simple de ce langage. Certains n'y accéderont jamais. Vous êtes donc sur la bonne voie.
Phil_1857
Messages postés
1883
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
178
7 juil. 2021 à 13:34
7 juil. 2021 à 13:34
Bonjour
Player c'est la classe
player en est une instance
donc il faut écrire player.move_left(), et non Player.move_left() ...
Player c'est la classe
player en est une instance
donc il faut écrire player.move_left(), et non Player.move_left() ...
georges97
Messages postés
11829
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
20 avril 2024
2 248
Modifié le 7 juil. 2021 à 13:40
Modifié le 7 juil. 2021 à 13:40
Bonjour Phil,
J'avais "presque" bon. A nouveau une question de majuscule/minuscule. Il faut faire attention à tout.
Cordialement,
Georges
J'avais "presque" bon. A nouveau une question de majuscule/minuscule. Il faut faire attention à tout.
Cordialement,
Georges
Bonjour,
J'ai pourtant essayé :
code main :
code Joueur :
mais ma console m'affiche toujours la même erreur :
Traceback (most recent call last):
File "main.py", line 28, in <module>
player.move_right()
AttributeError: 'Player' object has no attribute 'move_right'
J'ai pourtant essayé :
code main :
import pygame pygame.init() class Game: def __init__(self): self.pressed = {} from Player import Player pygame.display.set_caption("jeu") screen = pygame.display.set_mode((1080, 720)) running = True print("Programme démaré") background = pygame.image.load('sprite/BG.png') player = Player() game = Game() while running: screen.blit(background, (0, 100)) screen.blit(player.image, player.rect) if game.pressed.get(pygame.K_RIGHT): player.move_right() elif game.pressed.get(pygame.K_LEFT): player.move_left() pygame.display.flip() for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: game.pressed[event.key] = True elif event.type == pygame.KEYUP: game.pressed[event.key] = False
code Joueur :
import pygame pygame.init() class Player(pygame.sprite.Sprite): def __init__(self): self.image = pygame.image.load('sprite/Player.png') self.health = 100 self.max_health = 100 self.attack = 10 self.velocity = 10 self.rect = self.image.get_rect() self.rect.x = 50 self.rect.y = 275 def move_right(self): self.rect.x += self.velocity def move_left(self): self.rect.x -= self.velocity
mais ma console m'affiche toujours la même erreur :
Traceback (most recent call last):
File "main.py", line 28, in <module>
player.move_right()
AttributeError: 'Player' object has no attribute 'move_right'
yg_be
Messages postés
22708
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 avril 2024
1 471
7 juil. 2021 à 15:07
7 juil. 2021 à 15:07
bonjour,
regarde bien l'indentation des def dans ta classe Player.
regarde bien l'indentation des def dans ta classe Player.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
7 juil. 2021 à 08:32
Bonjour,
N'ayant sûrement pas bien réussi à suivre l'explication que je te remercie de m'avoir fournie, la console m'affiche l'erreur suivante :
Traceback (most recent call last):
File "main.py", line 20, in <module>
game = Game()
NameError: name 'Game' is not defined
Encore une fois je remets le code :
Merci de l'aide que tu as bien voulu me donner et merci d'avance à ceux qui voudront bien m'aider.
7 juil. 2021 à 09:14
En python, par convention, on écrit le nom d'une classe avec sa 1ère lettre en majuscule, et cette écriture est réservée à la déclaration de classe uniquement.
Admettons ta classe Game, et une instanciation
Cela va fonctionner, et tout roule, sauf qu'admettons tu as besoin de faire plus d'une instance
Tu auras une erreur du genre
Car la classe Game aura été écrasée, voilà pourquoi on utilise des conventions.
Et la bonne façon de faire est :
Il y a aussi les constantes en python, là la 1ère lettre est aussi en majuscules, mais tout est en majuscules.
En respectant ces conventions, tu n'auras plus ce genre de problème, il te reste à corriger ton code en respectant ces règles =)
Modifié le 7 juil. 2021 à 09:41
Je parle sous le contrôle des premiers intervenants sur ce sujet, à qui je laisse bien entendu la main.
Les messages d'erreur sont un moyen incontournable pour débugger un programme. Il faut apprendre à les déchiffrer.
Ici, c'est explicite, sauf erreur de ma part:
File "main.py", line 20, in <module>
game = Game()
NameError: name 'Game' is not defined
vous instanciez un objet game qui appartiendrait à la classe Game() mais après avoir créé en ligne 4 une classe nommée game (avec un g minuscule, contrairement à votre premier script).
Le python ne sait plus où il habite.
edit: je laisse mon message,mas à la lecture des précédentes réponses, je ne suis pas sûr de mes explications. Je demande l'indulgence des autres intervenant, sachant que je suis un faux débutant en python et ne maîtrise pas (encore) les classes, comme le demandeur.
N'hésitez donc pas à m'indiquer si ma suggestion est erronée, d'autan que ma réponse s'est croisée avec celles de stoic à 9h15, bien plus complète.
Cordialement.