AttributeError: type object 'X' has no attribute 'X'

Fermé
theolefou Messages postés 14 Date d'inscription vendredi 10 janvier 2014 Statut Membre Dernière intervention 24 novembre 2014 - 11 mai 2014 à 03:38
theolefou Messages postés 14 Date d'inscription vendredi 10 janvier 2014 Statut Membre Dernière intervention 24 novembre 2014 - 12 mai 2014 à 10:09
bonjours a tous,

j'ai un petit problème au niveau d'un attribut de classe mais je ne voit pas d'ou est-ce que cela vient!

quand je fait:

def gravite (self):
if self.rect_p.collidelist(niveau.list_rect_plat):
print ("ok")

il me renvoie:


in gravite
if self.rect_p.collidelist(niveau.list_rect_plat):
AttributeError: type object 'niveau' has no attribute 'list_rect_plat'

voici le code complet de la classe niveau :

import pygame
from pygame import *

class niveau:
""" creation de niveau """

nombre_sprite_haut = 30 #nombrede ligne = hauteur
nombre_sprite_long = 60 #nombre de sprite par ligne
taille_sprite = 20 #nombre de pixel par sprite
taille_haut = (nombre_sprite_haut * taille_sprite)
taille_long = (nombre_sprite_long * taille_sprite)


def __init__(self,fichier):
self.fichier = fichier
self.structure = 0
# dans la construction de la map la ou je veux laisser le fond apparend
# je place un 0

def generer(self):
""" generation du niveau en fonction du fichier """
with open(self.fichier, "r") as fichier:
structure_niveau = []
for ligne in fichier:
ligne_niveau = []
#parcourt les ligne du fichier

for sprite in ligne:
if sprite != '\n':
ligne_niveau.append(sprite)
# parcourt les sprite du fichier et ignore les \n
structure_niveau.append(ligne_niveau)
self.structure = structure_niveau
#ajout les sprites et les lignes dans les differentes liste
#et sauvgarde de la structure general

def affichier(self, fenetre):
""" generation de l'affichage en fonction du generer """

plateforme = pygame.image.load("sol.png").convert_alpha()
plateforme = pygame.transform.scale(plateforme, (20, 20))
arrivee = pygame.image.load("Finish.png").convert_alpha()
arrivee = pygame.transform.scale(arrivee, (20, 20))
self.coor_y_plat = []
self.coor_arrive = []
self.list_rect_plat = []

num_ligne = 0
for ligne in self.structure:
#parcourt la liste du niveau

num_case = 0
y = num_ligne * self.taille_sprite
for sprite in ligne:
#parcourt les liste de ligne
x = num_case * self.taille_sprite
#calcul la position reel en pixel
if sprite =="p": # p = plateforme
fenetre.blit(plateforme, (x,y))
self.coor_y_plat.append((y))
elif sprite == "a": # a = arriver
fenetre.blit(arrivee, (x,y))
num_case += 1
self.pos_plat = pygame.Rect(x, y, plateforme.get_width(), plateforme.get_height())
self.list_rect_plat.append(self.pos_plat)
num_ligne += 1
print(self.list_rect_plat)



et celui de la class perso :


import pygame
from pygame import *
from pygame.locals import *

import class_niveau
from class_niveau import *

pygame.init()

class perso:
"""creation du personnage"""
gravite = -3


# ce qui est entre parenthese est rentree chaque instance de perso
def __init__(self, y, acteur,x = 0):
# Sprite du perso
self.acteur = acteur
self.acteur = pygame.image.load("perso.png").convert_alpha()
#position du perso
self.pos_x = x
self.pos_y = y
self.pos_p = (self.pos_x, self.pos_y)
self.next_pos_x = self.pos_x + 1
self.next_pos_y = self.pos_y + 1
self.next_pos_p = (self.next_pos_x, self.next_pos_y)
self.rect_p = Rect(self.next_pos_x, self.next_pos_y, self.acteur.get_width(), self.acteur.get_height())


def deplacement (self, direction):
"""deplacement du perso"""

#deplacement vers la droite
if direction == "droite" and self.next_pos_x != 'p':
self.pos_x -= 1

#deplacment vers la gauche
if direction == "gauche"and self.next_pos_x != 'p':
self.pos_x += 1


def action (self, do):
""" action possible du personnage"""
if do == "jump" and self.next_pos_y != 'p':
self.pos_y -= 50

def gravite (self):
if self.rect_p.collidelist(niveau.list_rect_plat):
print ("ok")


je suis desoler pour la norme j'ai lut tout sa il y a pas longtemp et avant de tout bouger et modifier ( les importation bizzare) je veux déja avoir un programme qui marche.

bref si quelqu'un a une idée ou une piste elle est la bienvenue par ce que je suis un peut perdue la j'ai tester plein de truc je suis aller voir a droite a gauche sur google mais soit je comprend rien de ce qu'il dise soit je n'arrive pas à l'appliqué à mon programe :/

en tout cas merci d'avance!

2 réponses

theolefou Messages postés 14 Date d'inscription vendredi 10 janvier 2014 Statut Membre Dernière intervention 24 novembre 2014 2
12 mai 2014 à 10:09
personne ? vraiment ?
2