import pygame
from game import Game
from player import Player
from monster import Monster
pygame.init()
# Générer la fenêtre
pygame.display.set_caption("Shooter")
screen = pygame.display.set_mode((1080, 720))
# Importer et charger l'arrière plan du jeu
background = pygame.image.load("assets/bg.jpg")
# Charger notre jeu
game = Game()
# Charger notre joueur
player = Player() # <--- L'erreur est ICI
running = True
# Boucle tant que running est sur Vrai
while running:
# Appliquer la fenêtre du jeu
screen.blit(background, (0, -200))
# Appliquer l'image de mon joueur
screen.blit(game.player.image, game.player.rect)
# Récupérer les projectiles du joueur
for projectile in game.player.all_projectiles:
projectile.move()
# Récupérer les monstres de notre jeu
for monster in game.all_monsters:
monster.forward()
# Appliquer l'ensemble des images de mon groupe projectiles
game.player.all_projectiles.draw(screen)
# Appliquer l'ensemble des images de mon groupe de monstres
game.all_monsters.draw(screen)
# Vérifier si le joueur souhaite aller à gauche ou à droite
if game.pressed.get(pygame.K_RIGHT) and game.player.rect.x + game.player.rect.width < screen.get_width():
game.player.move_right()
elif game.pressed.get(pygame.K_LEFT) and game.player.rect.x > 0:
game.player.move_left()
# Mettre à jour l'écran
pygame.display.flip()
# Si le joueur ferme la fenêtre
for event in pygame.event.get():
# Vérification que l'event est la fermeture de la fenêtre
if event.type == pygame.QUIT:
running = False
pygame.quit()
print("Fermeture du jeu !")
# Détecter 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 notre projectile
if event.key == pygame.K_SPACE:
game.player.launch_projectile()
elif event.type == pygame.KEYUP:
game.pressed[event.key] = False
Quand j'execute les autres programmes de mon projet un par un, il n'y a pas d'erreur, mais celui-là, il possède une erreur. (ligne 19)
La voici :
Traceback (most recent call last):
File "H:/Python/[FR] [YT] Graven - Développement/Shooter/main.py", line 19, in <module>
player = Player()
TypeError: __init__() missing 1 required positional argument: 'game'
Sans le code de la classe Player, ça va être difficile de te répondre.
Oui, c'est vrai.
Voici le code de la classe Player :
import pygame
from projectile import Projectile
# Créer une première classe qui va représenter notre joueur
class Player(pygame.sprite.Sprite):
def __init__(self, game):
"""
:rtype: object
"""
super().__init__()
self.game = game
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 = 400
self.rect.y = 500
def launch_projectile(self):
# Créer une nouvelle instance de la classe Projectile
if not self.game.check_collision(self, self.game.all_monsters):
self.all_projectiles.add(Projectile(self))
def move_right(self):
# Si le joueur n'est pas en collision avec un monstre
self.rect.x += self.velocity
def move_left(self):
self.rect.x -= self.velocity
Tu vois (ligne 7) que la création d'une instance de la classe Player attend exactement un argument game, donc si tu écris un appel Player() sans argument, tu auras une erreur comme c'est le cas dans la ligne 19 de ton premier code.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
import pygame
from game import Game
from player import Player
pygame.init()
# Je génère la fenêtre du jeu
pygame.display.set_caption("Petit arbre le jeu")
screen = pygame.display.set_mode((1080, 720))
background = pygame.image.load('assets/bg.jpg').convert()
# Charger le jeu
game = Game()
player = Player()
running=True
while running:
# Mettre l'arrière plan. background est l'arrière plan et screen la surface.
screen.blit(background, (0, -180))
# Le joueur
screen.blit(game.player.image, game.player.rect)
# Récupérer les projectils
for projectile in game.player.all_projectiles:
projectile.move()
# Les monstres
for monster in game.all_monster:
monster.forward()
# Les projectiles
game.player.all_projectiles.draw(screen)
# Les monstres
game.all_monster.draw(screen)
pygame.display.flip()
# Si il veut aller a droit, a gauche, en bas ou en haut
if game.pressed.get(pygame.K_d) and game.player.rect.x + game.player.rect.width -40 < screen.get_width():
game.player.move_right()
elif game.pressed.get(pygame.K_q) and game.player.rect.x > -40:
game.player.move_left()
elif game.pressed.get(pygame.K_s) and game.player.rect.y < 560:
game.player.move_bas()
elif game.pressed.get(pygame.K_z) and game.player.rect.y > -40:
game.player.move_haut()
for event in pygame.event.get():
# Si fenêtre == fermé
if event.type == pygame.QUIT:
running = False
pygame.quit()
print("The end")
# Si on appui sur le clavier
elif event.type == pygame.KEYDOWN:
game.pressed[event.key] = True
# Pour tirer
if event.key == pygame.K_c:
game.player.launch_projectile_right()
if event.key == pygame.K_x:
game.player.launch_projectile_left()
elif event.type == pygame.KEYUP:
game.pressed[event.key] = False
player.py
import pygame
from Projectile import Projectile_right
from Projectile import Projectile_left
pygame.init()
# Classe joueur
class Player(pygame.sprite.Sprite):
def __init__(self, game):
super().__init__()
self.game = game
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 = 300
self.rect.y = 520
def move_right(self):
# if collision = False
if not sel.game.check_collision(self, self.game.all_monsters):
self.rect.x += self.velocity
def move_left(self):
self.rect.x -= self.velocity
def move_haut(self):
self.rect.y -= self.velocity
def move_bas(self):
self.rect.y += self.velocity
def launch_projectile_right(self):
self.all_projectiles.add(Projectile_right(self))
def launch_projectile_left(self):
self.all_projectiles.add(Projectile_left(self))
Donc même problème, mettre l'argument game dans l'instanciation de Player.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Ok en fait tu a bien corriger une erreur (merci beaucoup) mais il y avait le même type d'erreur dans game.py
import pygame
pygame.init()
from player import Player
from monster import Monster
# Classe jeu
class Game():
def __init__(self):
# Générer le joueur
self.player = Player(game) #ICI (Je l'ai déjà corriger)
# Groupe de monstres
self.all_monster = pygame.sprite.Group()
self.pressed = {}
self.spawn_monster()
def spawn_monster(self):
monster = Monster()
self.all_monster.add(monster)
def check_collision(self, sprit, group):
return pygame.sprite.spritcollide(sprite, group, False, pygame.sprite.collide_mask)
Mais maintenant l'erreur est
Traceback (most recent call last):
File "main.py", line 14, in <module>
game = Game()
File "/Users/simonferre/Desktop/Python/Mon premier jeu Python/game.py", line 11, in __init__
Bah tu vois bien que game n'est pas définie, il faut y placer une instance de game, et dans la classe Game ça se nomme self.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Ouvre un nouveau sujet, présente ton code dans les balises adaptées et surtout met l'erreur que t'indique l'interpréteur.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
C'est bon j'ai créer un nouveau sujet, je l'ai nommé "Erreur python arguments manquants position joueur". J'ai mieux expliquer mon problème la-bas, merci à ceux qui iront voir.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Je ferme ce sujet. En cas de désaccord, me contacter par MP.
Cordialement, Le fan de programmation, Ugo_75_b
Découverte Python Doc Tkinter Les chaînes de caractères
Cordialement, Le fan de programmation, Ugo_75_b
Découverte Python Doc Tkinter Les chaînes de caractères
Cordialement, Le fan de programmation, Ugo_75_b
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Cordialement, Le fan de programmation, Ugo_75_b
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)