Bonjour à tous,
je suis nouveau en programmation, j'ai donc suivi un tutoriel pour essayer de programmer un petit jeu néanmoins je me heurte a une erreur que je ne comprends pas. Pouvez-vous m'éclairer ?
je tiens a vous précisé que l'erreur vient depuis que j'ai ajouter la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
    if self.player.game.check_collision(self, self.player.game.all_players):
            #si on touche le monstre on supp
            self.remove()
sans cette ligne le jeu fonctionne

Merci par avance a toutes les personnes qui vont essayer de m'aider !

erreur :

AttributeError: 'Player' object has no attribute 'game'


CODE main.py :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import pygame
from player import Player
from game import Game
 
 
pygame.init() #generer la fenetre du jeu 
pygame.display.set_caption("j'apprends a programmer")
screen = pygame.display.set_mode((1600, 900))
 
background = pygame.image.load('PygameAssets-main/bg.jpg')
 
#charger img  joueur
player = Player()
game = Game()
running = True
 
while(running):
    #applique l'arrire plan
    screen.blit(background, (0, 0))
    #applique img joueur
    screen.blit(game.player.image,game.player.rect)
 
    #recup les projectiles du joueur
    for projectile in game.player.all_projectiles:
        projectile.movedroit()
 
    for monster in game.all_monsters:
        monster.avancer()
 
 
    #appliquer le groupe de projectile ( LE DESSINE )
    game.player.all_projectiles.draw(screen)
 
    #appliquer l'ensemble de groupe d'image monster
    game.all_monsters.draw(screen)
 
 
 
 
    if game.pressed.get(pygame.K_RIGHT) and game.player.rect.x < 1500:
        game.player.move_right()
    elif game.pressed.get(pygame.K_LEFT) and game.player.rect.x > -70:
        game.player.move_left()
 
    #maj de l'image
    pygame.display.flip()
    #si je ferme la fenetre
    for event in pygame.event.get():
        #verif levent
        if event.type == pygame.QUIT:
            running = False
            pygame.quit()
            print("FIN")
 
        elif event.type == pygame.KEYDOWN:
            game.pressed[event.key] = True
 
            #espace pour tirer
            if event.key == pygame.K_1:
                game.player.launch_projectile()
 
            elif event.key == pygame.K_2:
                game.player.launch_projectile()
 
        elif event.type == pygame.KEYUP:
            game.pressed[event.key] = False
 
    print(game.player.rect)

CODE projectile.py :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import pygame
 
#def class pour le projectile
 
class Projectile(pygame.sprite.Sprite):
    #def constructeur
    def __init__(self, player):
 
 
        super().__init__()
        self.velocity = 1
        self.player = player
        self.image = pygame.image.load('PygameAssets-main/projectile.png')
        self.image = pygame.transform.scale(self.image, (25, 25))
        self.rect = self.image.get_rect()
        self.rect.x = player.rect.x + 100 
        self.rect.y = player.rect.y + 50
        self.origin_image = self.image
        self.angle = 0
 
 
    def rotate(self):
        #tourne la crotte de nez
        self.angle += 1
        self.image = pygame.transform.rotozoom(self.origin_image, self.angle, 1)
        self.rect = self.image.get_rect(center=self.rect.center)
 
 
    def remove(self):
        # efface le projectile
        self.player.all_projectiles.remove(self)
 
 
    def movedroit(self):
        self.rect.x += self.velocity
 
        self.rotate()
        #verif si on touche le monstre
        if self.player.game.check_collision(self, self.player.game.all_players):
            #si on touche le monstre on supp
            self.remove()
 
        #enlever le projectile qd il sort de l'écran
        if self.rect.x > 1700:
            self.remove()
 
 
    def movegauche(self):
        self.rect.x -= self.velocity

CODE game.py :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pygame
from player import Player
from monster import Monster
from projectile import Projectile
class Game:
 
    def __init__(self):
 
        #generer joueur ds la parti
        self.all_players = pygame.sprite.Group
        self.player = Player()
        self.all_players.add(self.player)
        #groupe de monster
        self.all_monsters = pygame.sprite.Group()
        self.pressed = {}
        self.spawn_monster()
 
    def check_collision(self, sprite, group):
        return pygame.sprite.spritecollide(sprite, group, False, pygame.sprite.collide_mask)
 
 
    def spawn_monster(self):
        monster = Monster(self)
        self.all_monsters.add(monster)

CODE player.py :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 = 25
        self.velocity = 1
        self.all_projectiles = pygame.sprite.Group() #range les projectiles dans ce groupe
        self.image = pygame.image.load('PygameAssets-main/player.png')
        self.rect = self.image.get_rect()
        self.rect.x = 400
        self.rect.y = 450
 
    def move_right(self):
        self.rect.x += self.velocity
 
    def move_left(self):
        self.rect.x -= self.velocity
 
    def launch_projectile(self):
        #créer une intance de la classe projectile
        #projectile = Projectile()
        self.all_projectiles.add(Projectile(self))


CODE monster.py :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pygame
from player import Player
from projectile import Projectile
 
 
class Monster(pygame.sprite.Sprite):
    def __init__(self, game):
        super().__init__()
        self.game = game
        self.health = 100
        self.max_health = 100
        self.attack = 5
        self.image = pygame.image.load('PygameAssets-main/mummy.png')
        self.rect = self.image.get_rect()
        self.rect.x = 1500
        self.rect.y = 420
        self.velocity = 1
 
    def avancer(self):
        #if not self.game.check_collision(self, self.game.all_players):
        self.rect.x -= self.velocity