Bug sur pygame

Fermé
NASSIM_BERKHLI Messages postés 4 Date d'inscription jeudi 1 avril 2021 Statut Membre Dernière intervention 24 mai 2023 - Modifié le 1 avril 2021 à 09:59
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 1 avril 2021 à 11:07
Bonjour,

vous pouvez débugger mon programme s'il vous plait.
Pour faire court, je ne peux pas appeler mon objet projectile.
Si vous voulez je peux vous envoyer les images en png par mail.

merci de votre aide


# initialisation du module pygame
import pygame
pygame.init()
#-------------------------------------------------------------------------------
# classe qui va définir le jeu
class Game :

def __init__(self):

# générer le personnage
self.player = Player()
self.pressed = {}
#-------------------------------------------------------------------------------
# classe qui va définir le personnage principale
class Player(pygame.sprite.Sprite) :

def __init__(self) :
super().__init__()

# paramètre du personnage
self.barre_vie = 100
self.barre_vie_max = 100
self.attaque = 10
self.vitesse = 3
# face graphique du personnage
self.image = pygame.image.load("personnage.png")
# taille du personnage
self.image = pygame.transform.scale(self.image, (60, 60))
# groupe de projectile
self.all_projectile = pygame.sprite.Group()
# coordonnée du personnage (sans cela le personnage ne pourra pas se déplacer)
self.deplacement = self.image.get_rect()
# positionnement du personnage
self.deplacement.x = 500
self.deplacement.y = 600

# méthode qui permet de ranger le projecile dans le groupe all_projectile (plus haut)
def lancer(self) :
self.all_projectile.add(Projectile(self))

# méthode qui permet le déplacement du personnage
def move_right(self) :
self.deplacement.x += self.vitesse
def move_left(self) :
self.deplacement.x -= self.vitesse

#-------------------------------------------------------------------------------
# classe qui va définir les projectiles
class Projectile(pygame.sprite.Sprite) :

def __init__(self, player) :
super().__init__()
self.vitesse = 6
self.image = pygame.image.load("projectile.png")
self.image = pygame.transform.scale(self.image, (266,133))
self.rect = self.image.get_rect()
self.rect.x = player.deplacement.x - 35
self.rect.y = player.deplacement.y + 10

def move(self) :
self.rect.x = self.rect.x + self.vitesse

#-------------------------------------------------------------------------------
# initialisation de la fenêtre
screen = pygame.display.set_mode((1080, 720))

# création du fond d'écran du jeu
fond_ecran = pygame.image.load("fond.png")
fond_ecran = pygame.transform.scale(fond_ecran, (1080, 720))

# charger le jeu
game = Game()
#-------------------------------------------------------------------------------
continu = True
while True:
#-------------------------------------------------------------------------------
# applique le fond d'écran sur le jeu
screen.blit(fond_ecran, (0, 0))
# applique l'image du personnage
screen.blit(game.player.image, game.player.deplacement)
# mouvement des projectiles
for Projectile in game.player.all_projectile :
Projectile.move()
if Projectile.rect.x > 300 :
game.player.all_projectile.remove(Projectile)

# applique l'ensemble des images de mon groupe de projectiles
game.player.all_projectile.draw(screen)
# vérifie si le personnage va à droite ou à gauche
if game.pressed.get(pygame.K_RIGHT) and game.player.deplacement.x <= 1026 :
game.player.move_right()
elif game.pressed.get(pygame.K_LEFT) and game.player.deplacement.x >= -2 :
game.player.move_left()
#-------------------------------------------------------------------------------
# met à jour l'écran
pygame.display.flip()
#-------------------------------------------------------------------------------
# lorsque l'utilisateur quitte la fenêtre
for event in pygame.event.get() :

if event.type == pygame.QUIT :
continu = False
pygame.quit()
#-------------------------------------------------------------------------------
# lorsque le joueur touche une touche du clavier
elif event.type == pygame.KEYDOWN :
game.pressed[event.key] = True

# lorsque le joueur touche sur w
if event.key == pygame.K_z:
game.player.lancer()




elif event.type == pygame.KEYUP :
game.pressed[event.key] = False


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.

4 réponses

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
1 avril 2021 à 09:42
Bonjour Nassim,

L'indentation étant importante en Python, merci de copier/coller ici ton code avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :

def test():
    print('test')

test()
0
NASSIM_BERKHLI Messages postés 4 Date d'inscription jeudi 1 avril 2021 Statut Membre Dernière intervention 24 mai 2023
Modifié le 1 avril 2021 à 10:10
j'y arrive pas

:/
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
1 avril 2021 à 11:06
Même en lisant la page du lien que je t'ai donné ?

C'est pourtant simple

On fait un copier/coller du code dans le message

On sélectionne le code à la souris, on déroule la liste avec la petite flèche noire dans le menu

en haut et on choisi Python

Apres validation du message, le code ressemble à mon exemple ci-dessus ...
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
1 avril 2021 à 11:07
Coucou Baladur,

Bah, tu l'as fait à a place .....
0