Erreur Python arguments manquants position joueur

Résolu/Fermé
Eliot2207 Messages postés 3 Date d'inscription vendredi 29 mai 2020 Statut Membre Dernière intervention 31 mai 2020 - Modifié le 30 mai 2020 à 10:10
yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024 - 1 juin 2020 à 09:48
Bonjour a tous, je suis débutant en Python et je voudrais créer un jeu comme pokemon où on dirigerais un personnage sur un petit monde ouvert. J'aimerais que le personnage puisse tirer des projectiles de sa main quand on appui sur la touche ESPACE. Mais j'ai un problème car lorsque je veux définir l'apparition du projectile au niveau du personnage, un message d'erreur met dis. Un problème d'arguments sur la position. Pouvez-vous m'aider à régler ce problème s'il-vous-plait, merci.
Voici mon code complet :

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


#lance la musique du jeu et la faire tourner à l'infini
route10_sound = pygame.mixer.Sound('route10.wav')
route10_sound.play(loops=-1, maxtime=0, fade_ms=0)


#création de la fenetre, generer la fenetre et ajouter le fond
pygame.display.set_caption("L'aventure")
screen = pygame.display.set_mode((700, 700))
background = pygame.image.load('poke.png')

#charger le jeu
game = Game()

#création de la boucle tant qu'elle est vraie
running = True

while running:

#appliquer la fenetre du jeu
    screen.blit(background, (0, 0))

#appliquer l'image du joueur
    screen.blit(game.player.image, game.player.rect)

#appliquer l'image de mon projectile
    game.player.all_projectiles.draw(screen)

#verifier si le joueur veut aller à gauche ou à droite
    if game.pressed.get(pygame.K_d) and game.player.rect.x < 660:
        game.player.move_right()
    elif game.pressed.get(pygame.K_a) and game.player.rect.x > 0:
        game.player.move_left()
    if game.pressed.get(pygame.K_s) and game.player.rect.y < 650:
        game.player.move_down()
    elif game.pressed.get(pygame.K_w) and game.player.rect.y > 0:
        game.player.move_up()

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

#lorsque le joueur quitte la fenetre
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            pygame.quit()
            print("A la prochaine")
#detecter si un joueur lache une touche du clavier
        elif event.type == pygame.KEYDOWN:
            game.pressed[event.key] = True

#détecter si la touche espace est enclenchée pour lancer un projectile
            if event.key == pygame.K_SPACE:
                game.player.launch_projectile()

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


Mes 3 classes :

import pygame
from player import Player


#créer une classe pour le jeu
class Game:

    def __init__(self):
        self.player = Player()
        self.pressed = {}


import pygame
from projectile import Projectile

#créer une classe pour le joueur
class Player(pygame.sprite.Sprite):

    def __init__(self):
        super().__init__()
        self.health = 100
        self.max_health = 100
        self.attack = 15
        self.velocity = 1
        self.all_projectiles = pygame.sprite.Group()
        self.image = pygame.image.load('persod.png')
        self.rect = self.image.get_rect()
        self.rect.x = 355
        self.rect.y = 510

    def launch_projectile(self):
        projectile = 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

    def move_down(self):
        self.rect.y += self.velocity

    def move_up(self):
        self.rect.y -= self.velocity


import pygame

#créer une classe pour le projectile du joueur
class Projectile(pygame.sprite.Sprite):

    def __init__(self, player):
        super().__init__()
        self.velocity = 2
        self.image = pygame.image.load('boulefeu.png')
        self.image = pygame.transform.scale(self.image, (15, 15))
        self.rect = self.image.get_rect()
        self.rect.x = player.rect.x
        self.rect.y = player.rect.y


Et voici mon message d'erreur :


Merci à ceux qui prendront le temps de m'aider et de regarder mon problème.

Message modifié par la modération
Pour une lecture plus facile du code, à l'avenir utilisez les balises, VOIR CETTE PAGE
A voir également:

1 réponse

yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024 Ambassadeur 1 557
30 mai 2020 à 11:16
bonjour,

il me semble que, d'une part, tu définis:
class Projectile(pygame.sprite.Sprite):
    def __init__(self, player):

tandis que appelles ainsi:
def launch_projectile(self):
        projectile = Projectile()

vois-tu que ce n'est pas cohérent? comprends-tu le message d'erreur?
0
Eliot2207 Messages postés 3 Date d'inscription vendredi 29 mai 2020 Statut Membre Dernière intervention 31 mai 2020
31 mai 2020 à 18:54
J'ai rajouté self dans les paramètres Projectile() , mais le message d'erreur est toujours le même. Pouvez-vous m'expliquer plus en détail s'il-vous-plait ?
0
yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024 1 557 > Eliot2207 Messages postés 3 Date d'inscription vendredi 29 mai 2020 Statut Membre Dernière intervention 31 mai 2020
31 mai 2020 à 19:23
peux-tu montrer ton code modifié, et le message d'erreur? tiens compte de la remarque de la modération.
0
Eliot2207 Messages postés 3 Date d'inscription vendredi 29 mai 2020 Statut Membre Dernière intervention 31 mai 2020 > yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024
31 mai 2020 à 21:10
Ca y est j'ai enfin réussi, j'ai simplement rajouter self dans projectile = Projectile(self)
Merci pour votre aide.
0
yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024 1 557 > Eliot2207 Messages postés 3 Date d'inscription vendredi 29 mai 2020 Statut Membre Dernière intervention 31 mai 2020
1 juin 2020 à 09:48
parfait, peux-tu alors marquer la discussion comme résolue?
0