Bonjour j'ai un projet d'Isn a terminer (conception d'un jeu) celui ci est dailleur presque terminé or je rencontre un probleme auquel je n'arrive malheuresment pas a repondre dans la conception de mes plateforme python me dit que que ma list plateforme n'est pas attribué et je ne comprend pas. Si qq peut m'apporter son aide svp...
si vous avez besoin des images pour comprendre le bug je peux vous les envoyer par mail si besoin...
import pygame, sys
from pygame.locals import *
class Stickmanrouge(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.Run1DR=pygame.image.load("1RunDR.png").convert_alpha()
self.Run2DR=pygame.image.load('2RunDR.png').convert_alpha()
self.Run3DR=pygame.image.load('3RunDR.png').convert_alpha()
self.Run4DR=pygame.image.load('4RunDR.png').convert_alpha()
self.Run5DR=pygame.image.load('5RunDR.png').convert_alpha()
self.Run6DR=pygame.image.load('6RunDR.png').convert_alpha()
self.Run1GR=pygame.image.load('1RunGR.png').convert_alpha()
self.Run2GR=pygame.image.load('2RunGR.png').convert_alpha()
self.Run3GR=pygame.image.load('3RunGR.png').convert_alpha()
self.Run4GR=pygame.image.load('4RunGR.png').convert_alpha()
self.Run5GR=pygame.image.load('5RunGR.png').convert_alpha()
self.Run6GR=pygame.image.load('6RunGR.png').convert_alpha()
self.baseGR=pygame.image.load('deboutGR.png').convert_alpha()
self.baseDR=pygame.image.load('deboutDR.png').convert_alpha()
self.Jump1DR=pygame.image.load('1JumpDR.png').convert_alpha()
self.Jump2DR=pygame.image.load('2JumpDR.png').convert_alpha()
self.Jump1GR=pygame.image.load('1JumpGR.png').convert_alpha()
self.Jump2GR=pygame.image.load('2JumpGR.png').convert_alpha()
self.image = self.baseDR
self.rect = self.image.get_rect()
# initialisation des caracteristique
self.change_x =0
self.change_y =0
self.vie=4
self.orientation=0
self.anim=0
self.tir=0
self.score=0
self.level = None
def update(self):
self.rect.x += self.change_x
self.rect.y += self.change_y
self.anim+=1
block_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)
for block in block_hit_list:
if self.change_x > 0:
self.rect.right = block.rect.left
elif self.change_x < 0:
# Otherwise if we are moving left, do the opposite.
self.rect.left = block.rect.right
self.rect.y += self.change_y
block_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)
for block in block_hit_list:
if self.change_y > 0:
self.rect.bottom = block.rect.top
elif self.change_y < 0:
self.rect.top = block.rect.bottom
self.change_y = 0
if self.rect.y<430:
self.change_y+=0.5
if self.rect.x<0:
self.rect.x-=self.change_x
if self.rect.x>1050:
self.rect.x-=self.change_x
if self.rect.y==430:
self.saut=0
if self.rect.y>430:
self.rect.y=430
self.change_y=0
self.saut=0
if self.orientation==0:
if self.change_x==0 and self.change_y==0:
self.image = self.baseGR
elif self.change_y==0 :
self.rect.y=455
if 0<self.anim and self.anim<10:
self.image=self.Run1GR
if 10<=self.anim and self.anim<20:
self.image=self.Run2GR
if 20<=self.anim and self.anim<30:
self.image=self.Run3GR
if 30<=self.anim and self.anim<40:
self.image=self.Run4GR
if 40<=self.anim and self.anim<50:
self.image=self.Run5GR
if 50<=self.anim and self.anim<60:
self.image=self.Run6GR
if self.anim>=60:
self.anim=0
else :
if 0<self.anim and self.anim<40:
self.image=self.Jump1GR
if 40<=self.anim and self.anim<80:
self.image=self.Jump2GR
## if 80<=self.anim and self.anim<120:
## self.image=self.saut1GR
## if 120<=self.anim and self.anim<160:
## self.image=self.saut2GR
## if self.anim>=160:
self.anim=0
if self.orientation==1:
if self.change_x==0 and self.change_y==0:
self.image = self.baseDR
elif self.change_y==0 :
self.rect.y=455
if 0<self.anim and self.anim<10:
self.image=self.Run1DR
if 10<=self.anim and self.anim<20:
self.image=self.Run2DR
if 20<=self.anim and self.anim<30:
self.image=self.Run3DR
if 30<=self.anim and self.anim<40:
self.image=self.Run4DR
if 40<=self.anim and self.anim<50:
self.image=self.Run5DR
if 50<=self.anim and self.anim<60:
self.image=self.Run6DR
if self.anim>=60:
self.anim=0
self.anim=0
else :
if 0<self.anim and self.anim<40:
self.image=self.Jump1DR
if 40<=self.anim and self.anim<80:
self.image=self.Jump2DR
## if 80<=self.anim and self.anim<120:
## self.image=self.saut1DR
## if 120<=self.anim and self.anim<160:
## self.image=self.saut2DR
## if self.anim>=160:
self.anim=0
def mvtgauche(self):
"""Mouvement gauche """
self.change_x = -4
self.change_y = 0
self.orientation=0
def mvtdroit(self):
"""Mouvement droite"""
self.change_x = 4
self.change_y = 0
self.orientation=1
def jump(self):
if self.saut==0:
self.saut=1
self.change_y=-16
if self.orientation==0:
if self.change_y==0:
self.image = self.baseGR
else :
if 0<self.anim and self.anim<-2:
self.image=self.Jump1GR
if self.anim>=-2:
self.anim=0
if self.orientation==1:
if self.change_y==0:
self.image = self.baseDB
else :
if 0<self.anim and self.anim<-2:
self.image=self.Jump1DR
if self.anim>=-2:
self.anim=0
# On detecte s'il y a une plate-forme en dessous
self.rect.y += 1
platform_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)
self.rect.y -= 1
# Si c'est le cas, on saute !
if len(platform_hit_list) > 0 or self.rect.bottom >= SCREEN_HEIGHT:
self.change_y = -15
def stop(self):
"""arret"""
self.change_x=0
class ShurikenDR(pygame.sprite.Sprite):
# initialisation
def __init__(self):
super().__init__()
self.image=pygame.image.load('ShurikenRouge1.png').convert_alpha()
self.rect = self.image.get_rect()
#mouvement du shuriken
def update(self):
self.rect.x+=10
if self.rect.x>1100:
self.kill()
class ShurikenGR(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image=pygame.image.load('ShurikenRouge1.png').convert_alpha()
self.rect = self.image.get_rect()
#mvt shuriken
def update(self):
self.rect.x-=10
if self.rect.x<-21:
self.kill()
class Stickmanbleu(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.Run1DB=pygame.image.load('1RunDB.png').convert_alpha()
self.Run2DB=pygame.image.load('2RunDB.png').convert_alpha()
self.Run3DB=pygame.image.load('3RunDB.png').convert_alpha()
self.Run4DB=pygame.image.load('4RunDB.png').convert_alpha()
self.Run5DB=pygame.image.load('5RunDB.png').convert_alpha()
self.Run6DB=pygame.image.load('6RunDB.png').convert_alpha()
self.Run1GB=pygame.image.load('1RunGB.png').convert_alpha()
self.Run2GB=pygame.image.load('2RunGB.png').convert_alpha()
self.Run3GB=pygame.image.load('3RunGB.png').convert_alpha()
self.Run4GB=pygame.image.load('4RunGB.png').convert_alpha()
self.Run5GB=pygame.image.load('5RunGB.png').convert_alpha()
self.Run6GB=pygame.image.load('6RunGB.png').convert_alpha()
self.baseGB=pygame.image.load('deboutGB.png').convert_alpha()
self.baseDB=pygame.image.load('deboutDB.png').convert_alpha()
self.Jump1DB=pygame.image.load('1JumpDB.png').convert_alpha()
self.Jump2DB=pygame.image.load('2JumpDB.png').convert_alpha()
self.Jump1GB=pygame.image.load('1JumpGB.png').convert_alpha()
self.Jump2GB=pygame.image.load('2JumpGB.png').convert_alpha()
self.image = self.baseGB
self.rect = self.image.get_rect()
self.change_x =0
self.change_y =0
self.vie=4
self.orientation=1
self.anim=0
self.tir=0
self.score=0
self.level = None
def update(self):
self.rect.x += self.change_x
self.rect.y += self.change_y
self.anim+=1
block_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)
for block in block_hit_list:
# Si mouvement a droite, aligner le bord avec l'obstacle a droite
if self.change_x > 0:
self.rect.right = block.rect.left
elif self.change_x < 0:
# si mouvement a gauche, aligner le bord avec l'obstacle a gauche
self.rect.left = block.rect.right
# Mouvement haut / bas
self.rect.y += self.change_y
self.anim+=1
# gestion des autres collisions (verticales)
block_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)
for block in block_hit_list:
# alignement haut/bas
if self.change_y > 0:
self.rect.bottom = block.rect.top
elif self.change_y < 0:
self.rect.top = block.rect.bottom
if self.rect.y<430:
self.change_y+=0.5
if self.rect.x<0:
self.rect.x-=self.change_x
if self.rect.x>1050:
self.rect.x-=self.change_x
if self.rect.y==430:
self.saut=0
if self.rect.y>430:
self.rect.y=430
self.change_y=0
self.saut=0
if self.orientation==0:
if self.change_x==0 and self.change_y==0:
self.image = self.baseGB
elif self.change_y==0 :
self.rect.y=455
if 0<self.anim and self.anim<10:
self.image=self.Run1GB
if 10<=self.anim and self.anim<20:
self.image=self.Run2GB
if 20<=self.anim and self.anim<30:
self.image=self.Run3GB
if 30<=self.anim and self.anim<40:
self.image=self.Run4GB
if 40<=self.anim and self.anim<50:
self.image=self.Run5GB
if 50<=self.anim and self.anim<60:
self.image=self.Run6GB
if self.anim>=60:
self.anim=0
else :
if 0<self.anim and self.anim<40:
self.image=self.Jump1GB
if 40<=self.anim and self.anim<80:
self.image=self.Jump2GB
self.anim=0
if self.orientation==1:
if self.change_x==0 and self.change_y==0:
self.image = self.baseDB
elif self.change_y==0 :
self.rect.y=455
if 0<self.anim and self.anim<10:
self.image=self.Run1DB
if 10<=self.anim and self.anim<20:
self.image=self.Run2DB
if 20<=self.anim and self.anim<30:
self.image=self.Run3DB
if 30<=self.anim and self.anim<40:
self.image=self.Run4DB
if 40<=self.anim and self.anim<50:
self.image=self.Run5DB
if 50<=self.anim and self.anim<60:
self.image=self.Run6DB
if self.anim>=60:
self.anim=0
else :
if 0<self.anim and self.anim<40:
self.image=self.Jump1DB
if 40<=self.anim and self.anim<80:
self.image=self.Jump2DB
self.anim=0
def mvtgauche(self):
"""Mouvement gauche """
self.change_x = -4
self.change_y = 0
self.orientation=0
def mvtdroit(self):
"""Mouvement droite"""
self.change_x = 4
self.change_y = 0
self.orientation=1
def jump(self):
if self.saut==0:
self.saut=1
self.change_y=-16
if self.orientation==0:
if self.change_y==0:
self.image = self.baseGB
else :
if 0<self.anim and self.anim<-2:
self.image=self.Jump1GB
if self.anim>=-2:
self.anim=0
if self.orientation==1:
if self.change_y==0:
self.image = self.baseDB
else :
if 0<self.anim and self.anim<-2:
self.image=self.Jump1DB
if self.anim>=-2:
self.anim=0
# On detecte s'il y a une plate-forme en dessous
self.rect.y += 1
platform_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)
self.rect.y -= 1
# Si c'est le cas, on saute !
if len(platform_hit_list) > 0 or self.rect.bottom >= SCREEN_HEIGHT:
self.change_y = -15
def stop(self):
"""arret"""
self.change_x=0
class ShurikenDB(pygame.sprite.Sprite):
# initialisation
def __init__(self):
super().__init__()
self.image=pygame.image.load('ShurikenBleu1.png').convert_alpha()
self.rect = self.image.get_rect()
#mouvement du shuri
def update(self):
self.rect.x+=10
if self.rect.x>1100:
self.kill()
class ShurikenGB(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image=pygame.image.load('ShurikenBleu1.png').convert_alpha()
self.rect = self.image.get_rect()
#mvt shuri
def update(self):
self.rect.x-=10
if self.rect.x<-21:
self.kill()
class Platform(pygame.sprite.Sprite):
"""classe des obstacles """
def __init__(self, width, height):
"""initialisation"""
super().__init__()
self.image = pygame.Surface([width, height])
self.image.fill(Noir)
self.rect = self.image.get_rect()
class Level(object):
""" Super classe a laquelle vont appartenir les differents niveaux """
def __init__(self, Stickmanbleu, Stickmanrouge):
""" initialisation des listes """
self.platform_list = pygame.sprite.Group()
self.stickmanbleu= Stickmanbleu
self.stickmanrouge= Stickmanrouge
def update(self):
""" Mise a jour des listes globales"""
self.platform_list.update()
def draw(self, screen):
""" affichage du niveau"""
# Draw the background
#screen.fill(BLUE)
## self.fond.draw(screen)
#screen.blit (fond, (0, 0))
# Draw all the sprite lists that we have
self.platform_list.draw(screen)
class Level_01(Level):
""" contenu du niveau 1 """
def __init__(self, Stickmanbleu, Stickmanrouge):
Level.__init__(self, Stickmanbleu, Stickmanrouge)
self.level_limit = -3000
## #decor
## fond=pygame.image.load('fond1.png').convert_alpha()
## background=Fond(fond)
## self.fond.add(background)
# Tableau regroupant largeur, hauteur et position (verticale puis horizontale) des obstacles
level = [
[100,20, 000, 100],
[100,20,000,300],
[80,20,200,200],
[100,20,120,450],
[100,20,360,380],
[20,350,700,250],
[100,20,400,200],
]
for platform in level:
block = Platform(platform[0], platform[1])
block.rect.x = platform[2]
block.rect.y = platform[3]
block.stickmanbleu = self.stickmanbleu
block.stickmanrouge = self.stickmanrouge
self.platform_list.add(block)
Noir = 0, 0, 0
Blanc = 255, 255, 255
def main():
""" Programme principal """
pygame.init()
# definition de la fenetre
screen = pygame.display.set_mode((1100,600))
pygame.display.set_caption("StickArena !")
stick=1
while stick ==1:
background = pygame.Surface(screen.get_size())
background.fill(Noir)
# Definition de la police
bigText = pygame.font.SysFont('Calibri', 50 , True)
# Definition du texte
# render(text, antialias, rgb color tuple)
title_text = bigText.render("STICKMAN Arena", True, Blanc)
# Le centre du texte est au centre quelque soit le texte
# Le texte est inscrit dans un rectangle
textpos = title_text.get_rect()
# Placement du texte en x et y
textpos.centerx = screen.get_rect().centerx
textpos.centery = 100
# Collage du texte sur le fond
background.blit(title_text, textpos,)
lancer_text=bigText.render("Appuyer pour jouer",True, Blanc)
textpos1 = lancer_text.get_rect()
textpos1.centerx = screen.get_rect().centerx
textpos1.centery = 500
background.blit(lancer_text, textpos1)
persobleu = pygame.image.load("bleuintro.png").convert()
background.blit(persobleu, (200,300))
persorouge = pygame.image.load("rougeintro.png").convert()
background.blit(persorouge, (700,300))
shurintro= pygame.image.load("shurintro.png").convert()
background.blit(shurintro, (475,300))
# Ajout du fond dans la fentre
screen.blit(background, (0, 0))
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
stick=0
pygame.display.update()
fond1=pygame.image.load('fond1.png').convert_alpha() # chargement et collage du fond
screen.blit(fond1, (0, 0))
level_list = []
level_list.append( Level_01(Stickmanbleu, Stickmanrouge) )
current_level_no = 0
current_level = level_list[current_level_no]
Stickmanbleu.level = current_level
Stickmanrouge.level = current_level
# creation personnage
stickmanbleu = Stickmanbleu()
stickmanbleu.rect.x = 250
stickmanbleu.rect.y = 100
stickmanrouge = Stickmanrouge()
stickmanrouge.rect.x = 750
stickmanrouge.rect.y = 100
shuriken_list = pygame.sprite.Group()
#creation des listes de sprites
active_sprite_list = pygame.sprite.Group()
active_sprite_list.add(stickmanbleu)
active_sprite_list.add(stickmanrouge)
shuriken_sprite_list = pygame.sprite.Group()
#reglage de l'horloge
clock = pygame.time.Clock()
# Boucle principale
continuer=1
while continuer:
for event in pygame.event.get():
if event.type == pygame.QUIT:
continuer=0
# touches enfoncees
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
stickmanrouge.mvtgauche()
if event.key == pygame.K_d:
stickmanrouge.mvtdroit()
if event.key == pygame.K_LEFT:
stickmanbleu.mvtgauche()
if event.key == pygame.K_RIGHT:
stickmanbleu.mvtdroit()
if event.key == pygame.K_w:
stickmanrouge.jump()
if event.key==pygame.K_UP:
stickmanbleu.jump()
if event.key == pygame.K_s:
if stickmanrouge.tir<=2 :
if stickmanrouge.orientation==1:
stickmanrouge.tir+=1
shuriken=ShurikenDR()
shuriken.rect.x=stickmanrouge.rect.x+21
shuriken.rect.y=stickmanrouge.rect.y+20
shuriken_sprite_list.add(shuriken)
active_sprite_list.add(shuriken)
active_sprite_list.add(shuriken)
if stickmanrouge.orientation==0:
stickmanrouge.tir+=1
Shuriken=ShurikenGR()
Shuriken.rect.x=stickmanrouge.rect.x-21
Shuriken.rect.y=stickmanrouge.rect.y+20
shuriken_sprite_list.add(Shuriken)
active_sprite_list.add(Shuriken)
if event.key==pygame.K_DOWN:
if event.key == pygame.K_DOWN:
if stickmanbleu.tir<=2 :
if stickmanbleu.orientation==1:
stickmanbleu.tir+=1
shuriken=ShurikenDB()
shuriken.rect.x=stickmanbleu.rect.x+21
shuriken.rect.y=stickmanbleu.rect.y+20
shuriken_sprite_list.add(shuriken)
active_sprite_list.add(shuriken)
if stickmanbleu.orientation==0:
stickmanbleu.tir+=1
shuriken=ShurikenGB()
shuriken.rect.x=stickmanbleu.rect.x-21
shuriken.rect.y=stickmanbleu.rect.y+20
shuriken_sprite_list.add(shuriken)
active_sprite_list.add(shuriken)
# touches relevees
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT and stickmanbleu.change_x < 0:
stickmanbleu.stop()
if event.key == pygame.K_a and stickmanrouge.change_x < 0:
stickmanrouge.stop()
if event.key == pygame.K_RIGHT and stickmanbleu.change_x > 0:
stickmanbleu.stop()
if event.key == pygame.K_d and stickmanrouge.change_x > 0:
stickmanrouge.stop()
# Mise a jour des Sprites
"""gestions des collisions stickman/ shuriken"""
active_sprite_list.update()
if len(shuriken_sprite_list)==0:
stickmanrouge.tir=0
hit_list = pygame.sprite.spritecollide(stickmanrouge,shuriken_sprite_list,False)
for hit in hit_list:
fondvictoireBleu=pygame.image.load('victoireBleu.png').convert_alpha()
screen.blit(fondvictoireBleu,(0, 0))
pygame.display.update()
pygame.time.delay(4000)
main()
#stickmanbleu
if len(shuriken_sprite_list)==0:
stickmanbleu.tir=0
hit_list = pygame.sprite.spritecollide(stickmanbleu,shuriken_sprite_list,False)
for hit in hit_list:
fondvictoirerouge=pygame.image.load('victoireRouge.png').convert_alpha()
screen.blit(fondvictoirerouge,(0, 0))
pygame.display.update()
pygame.time.delay(4000)
main()
current_level.update()
# Tous les objets a dessiner doivent se trouver ici
screen.blit(fond1, (0, 0))
current_level.draw(screen)
active_sprite_list.draw(screen)
# On limite le nombre d'images a 60 images par seconde
clock.tick(60)
# On raffraichit l'ecran avec tout ce qu'on a dessine
pygame.display.flip()
pygame.quit()
main()
Il faudrait donner le traceback complet de l'erreur que te retourne python, sans ça, ça va être compliqué de déterminer sans exécution de savoir où ton code plante parmi ces 700 lignes.