Partage
  • Partager sur Facebook
  • Partager sur Twitter

pygame error python

24 décembre 2021 à 15:11:00

bonjour j'ai un probleme avec mon code voici l'error 

Traceback (most recent call last):
  File "C:\Users\droop\PycharmProjects\Game v 1.0\main.py", line 43, in <module>
    game.all_monster.draw(screen)
TypeError: AbstractGroup.draw() missing 1 required positional argument: 'surface'


merci d'avance 

fichier main.py

import pygame
from self import self

from game import Game
from player import Player
from projectile import Projectile
pygame.init()

#generer le fenettre du jeux

pygame.display.set_caption("the Survival")
screen = pygame.display.set_mode((1700, 1080))

# importer de charger l'arriere plan

background = pygame.image.load("assets/bg.jpg")

# charger notre jeux
game = Game()

# charger notre joueur

player = Player()

running = True

#Boucle tant que que cette ccondition est vrai

while running:

    # appliquer l'arriere plan de notre jeu
    screen.blit(background, (0, 0))

    # appliquer l immage de mon joueur
    screen.blit(game.player.image, game.player.rect)

    for projectile in game.player.all_projectiles:
        projectile.move()

    # appliquer l'ensemble des images de mon groupe de projectile
    game.player.all_projectiles.draw(screen)

    game.all_monster.draw(screen)


    # verifier si le joueur souhaite aller a gauche ou a droite
    if game.pressed.get(pygame.K_RIGHT):
        game.player.move_right()
    elif game.pressed.get(pygame.K_LEFT) and game.player.rect.x > 0:
        game.player.move_left()



    # mettre a jour l'écran
    pygame.display.flip()

    #si le joueur ferme cette fenetre
    for event in pygame.event.get():
        #que l'evenement est fermeture de fenetre
        if event.type == pygame.QUIT:
            running = False
            pygame.quit()
            print("fermeture du jeux")
            # detecter  si un joueur lache une touche du clavier
        elif event.type == pygame.KEYDOWN:
            game.pressed[event.key] = True

            # detecter si le touche espace est enclencher pour lancer projectile

            if event.key == pygame.K_SPACE:
                game.player.launch_projectile()
        elif event.type == pygame.KEYUP:
            game.pressed[event.key] = False

fichier game.py

import pygame.sprite
from monster import Monster
from player import Player

class Game:

    def __init__(self):
        # def si notre jeux a commencer ou non
        self.is_playing = False
        self.player = Player()
        self.all_monster = pygame.sprite.Group
        self.pressed = {}
        self.spawn_monster()

    def spawn_monster(self):
        monster = Monster
        self.all_monster.add(monster)

    def update(self):
        # mettre a jour l'écran
        pygame.display.flip()

        # si le joueur ferme cette fenetre
        for event in pygame.event.get():
            # que l'evenement est fermeture de fenetre
            if event.type == pygame.QUIT:
                running = False
                pygame.quit()
                print("fermeture du jeux")
                # detecter  si un joueur lache une touche du clavier
            elif event.type == pygame.KEYDOWN:
                self.pressed[event.key] = True

                # detecter si le touche espace est enclencher pour lancer projectile

                if event.key == pygame.K_SPACE:
                    self.player.launch_projectile()
            elif event.type == pygame.KEYUP:
                self.pressed[event.key] = False


fichier player.py

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 = 10
        self.velocity = 5
        self.all_projectiles = pygame.sprite.Group()
        self.image = pygame.image.load('assets\player.png')
        self.rect = self.image.get_rect()
        self.rect.x = 850
        self.rect.y = 700

    def launch_projectile(self):
        # cree une nouvelle instance de la classe projectile

        self.all_projectiles.add(Projectile(self))

    def move_right(self):
        self.rect.x += self.velocity

    def move_left(self):
        self.rect.x -= self.velocity


fichier monster.py

import pygame

class Monster(pygame.sprite.Sprite):

    def __init__(self):
        super().__init__()
        self.health = 110
        self.max_health = 110
        self.attack = 5
        self.image = pygame.image.load('assets\mummy.png')
        self.rect = self.image.get_rect()

et pour finir projectile.py

import pygame


# definir la classe qui va generer le projectile de notre joueur
import self as self


class Projectile(pygame.sprite.Sprite):

    #def le constructeur de cette classe
    def __init__(self, player):
        super().__init__()
        self.velocity = 7
        self.player = player
        self.image = pygame.image.load('assets\projectile.png')
        self.image = pygame.transform.scale(self.image, (100, 100))
        self.rect = self.image.get_rect()
        self.rect.x = player.rect.x + 120
        self.rect.y = player.rect.y + 80
        self.origin_image = self.image
        self.angle = 0

    def rotate(self):
        self.angle += 9
        self.image = pygame.transform.rotozoom(self.origin_image, self.angle, 1)
        self.rect = self.image.get_rect(center=self.rect.center)



    def remove(self):
        self.player.all_projectiles.remove(self)

    def move(self):
        self.rect.x += self.velocity 
        self.rotate()
        if self.rect.x > 1700:
            self.remove()
            print("c bon c'est suprimer ")




-
Edité par ArtureValence 24 décembre 2021 à 15:12:49

  • Partager sur Facebook
  • Partager sur Twitter
24 décembre 2021 à 15:23:07

Bonjour,

Doublon

Les doublons nuisent au bon fonctionnement du forum et sont donc interdits. Si vous vous êtes trompé de section, il suffit de signaler votre sujet au staff pour qu'il le déplace au bon endroit.

Je vous invite à continuer la discussion sur l'autre sujet : https://openclassrooms.com/forum/sujet/pygame-error-sprite

Mauvais titre

Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

Pour modifier votre titre, éditez le premier message de votre sujet.

(titre originel : pygame error python)

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

Liens conseillés

-
Edité par AbcAbc6 24 décembre 2021 à 15:23:44

  • Partager sur Facebook
  • Partager sur Twitter