Partage
  • Partager sur Facebook
  • Partager sur Twitter

Collision Pygame

pygame

Sujet résolu
14 novembre 2020 à 16:40:48

Bonjour à tous, je suis entrain de créer un platefromer en pygame ou 2 personnages  : mario et luigi s'affrontent sur une map, le but est d'attaquer l'adversaire pour qu'il perdre un point et si il perd ses 3 points il a perdu, quand on clique sur une touche (espace pour mario et enter pour luigi), un projectile part, le problème est que j'ai mis comme condition : si il n'y a pas de collision entre le projectile et un perso (mario ou luigi) : le déplacement du projectile continue sinon (cela veut dire quand il y a collision ) : le perso en contacte perd un point de vie, sauf que j'ai un message d'erreur car mon système de collision est mal géré, j'ai cherché sur internet sur d'autres forum mais j'ai pas trouvé le réponse, pouvez vous m'aider svp merci bcp je voit affiche des screens ci contre :

import pygame

class Projectile(pygame.sprite.Sprite) :

    def __init__(self, game, direction ,qui) :
        self.image = pygame.image.load("assets/projectile.png")
        self.image = pygame.transform.scale(self.image, (20, 20))
        self.rect = self.image.get_rect()
        self.game = game
        self.player_actuel = qui
        self.direction = direction
        self.vitesse = 12

        if qui == "mario" :
            self.rect.x = self.game.player1.rect.x
            self.rect.y = self.game.player1.rect.y
        elif qui == "luigi" :
            self.rect.x = self.game.player2.rect.x
            self.rect.y = self.game.player2.rect.y

    def remove(self) :
        self.game.all_projectile.remove(self) #Détruire le projectile courant

    def move(self) :

        if self.player_actuel == "mario" :
            if self.direction == "droite" :
                if not self.game.check_collision_sprite(self.rect, self.game.player2.rect) :
                    if self.rect.x <= 1600 :
                        self.rect.x = self.rect.x + self.vitesse
                    else :
                        self.remove()
                        print("Suppression !")
                else :
                    self.remove()
                    self.game.player1.vie -= 1
                    print("Collision / Suppression !")
                    #Ajouter bruitage vies
            elif self.direction == "gauche" :
                if not self.game.check_collision_sprite(self.rect, self.game.player2.rect) :
                    if self.rect.x >= 0 :
                        self.rect.x = self.rect.x - self.vitesse
                    else :
                        self.remove()
                        print("Suppression !")
                else :
                    self.remove()
                    self.game.player1.vie -= 1
                    print("Collision / Suppression !")

        elif self.player_actuel == "luigi" :
            if self.direction == "droite" :
                if not self.game.check_collision_sprite(self.rect, self.game.player1.rect) :
                    if self.rect.x <= 1600 :
                        self.rect.x = self.rect.x + self.vitesse
                    else :
                        self.remove()
                        print("Suppression !")
                else :
                    self.remove()
                    self.game.player2.vie -= 1
                    print("Collision / Suppression !")
            if self.direction == "gauche" :
                if not self.game.check_collision_sprite(self.rect, self.game.player1.rect) :
                    if self.rect.x >= 0 :
                        self.rect.x = self.rect.x - self.vitesse
                    else :
                        self.remove()
                        print("Suppression !")
                else :
                    self.remove()
                    self.game.player2.vie -= 1
                    print("Collision / Suppression !")
    

Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "/home/remi/Bureau/Oufioo/main.py", line 254, in <module>
    game.ajout_projectile(game.direction_player1, "mario")
  File "/home/remi/Bureau/Oufioo/game.py", line 43, in ajout_projectile
    self.all_projectile.add(Projectile(self, direction, qui))
  File "/usr/lib/python3/dist-packages/pygame/sprite.py", line 361, in add
    sprite.add_internal(self)
  File "/usr/lib/python3/dist-packages/pygame/sprite.py", line 163, in add_internal
    self.__g[group] = 0
AttributeError: 'Projectile' object has no attribute '_Sprite__g'

-
Edité par LaCoquille33 14 novembre 2020 à 17:15:21

  • Partager sur Facebook
  • Partager sur Twitter
18 novembre 2020 à 16:32:16

Bonjour,

peux-tu envoyer le code de main.py ?

Merci,

Yannis300307

  • Partager sur Facebook
  • Partager sur Twitter

Bonjour je suis un humain ! Enfin peut-être que nous vivons dans un univers virtuel et que

ce qu'on croit être, n'est pas ??!!!!

23 novembre 2020 à 14:39:31

Bonjour, pas de problème :

#Importation :
import pygame
import pygame, sys
from pygame.locals import *
from game import Game

pygame.init()
pygame.mixer.init()

#Variables :
longueur = 1600
hauteur = 900
boucle = True
statut = "menu"
tableau_animation = [True] * 40 + [False] * 40
index_tableau = 0

#Création de la fenêtre : 
pygame.display.set_caption("Oufioo")
fenetre = pygame.display.set_mode((longueur, hauteur))

#Menu :
fond_ecran_menu = pygame.image.load("assets/fond_ecran.jpg")
fond_ecran_menu = pygame.transform.scale(fond_ecran_menu, (longueur, hauteur))
black = (0, 0, 0)
texte_play = pygame.image.load("assets/texte_play.png")

#Jeux :
fond_ecran_jeux = pygame.image.load("assets/fond_ecran_jeux.jpg")
fond_ecran_jeux = pygame.transform.scale(fond_ecran_jeux, (longueur, hauteur))

#Musiques :
musique_menu = pygame.mixer.Sound("sounds/musique_menu.ogg")
musique_jeux = pygame.mixer.Sound("sounds/musique_jeux.ogg")
musique_menu.play(-1)

#Cursor :
cursor = pygame.image.load("assets/projectile.png")
cursor = pygame.transform.scale(cursor, (60, 60))

#Instance de la classe game :
game = Game()

#Boucle du jeux :
while boucle : 
    mouse_x, mouse_y = pygame.mouse.get_pos()
    #print(mouse_x, mouse_y)
    #print(game.avant_saut_y1)

    #Menu :
    if statut == "menu" :
        fenetre.blit(fond_ecran_menu, (0, 0))
        #Cursor :
        fenetre.blit(cursor, (mouse_x - 30, mouse_y - 30))
        if tableau_animation[index_tableau] == True :
            fenetre.blit(texte_play, (1000, 625))
        index_tableau += 1
        if index_tableau == len(tableau_animation) - 1 :
            index_tableau = 0

    #Jeux :
    elif statut == "jeux" :
        fenetre.blit(fond_ecran_jeux, (0, 0))
        fenetre.blit(game.player1.image, game.player1.rect)
        fenetre.blit(game.player2.image, game.player2.rect)
        for projectile in game.all_projectile :
            projectile.move()
        game.all_projectile.draw(fenetre)

        #Déplacement :
        if game.pressed.get(pygame.K_d) == True and game.player1.rect.x <= 1525 :
            game.player1.droite()
            game.direction_player1 = "droite"
            game.player1.show_droite()
            
        if game.pressed.get(pygame.K_q) == True and game.player1.rect.x >= 0:
            game.player1.gauche()
            game.direction_player1 = "gauche"
            game.player1.show_gauche()

        if game.pressed.get(pygame.K_m) == True and game.player2.rect.x <= 1538:
            game.player2.droite()
            game.direction_player2 = "droite"
            game.player2.show_droite()
            
        if game.pressed.get(pygame.K_k) == True and game.player2.rect.x >= 10:
            game.player2.gauche()
            game.direction_player2 = "gauche"
            game.player2.show_gauche()

        #Pour les sauts avant :
        #Joueur 1 :
        if game.entrain_de_sauter1 == False :
            if game.player1.rect.y >= 600 and game.player1.rect.y <= 615 :
                game.avant_saut_y1 = 606
            if game.player1.rect.y >= 320 and game.player1.rect.y <= 463 :
                game.avant_saut_y1 = 380
            if game.player1.rect.y >= 121 and game.player1.rect.y <= 312 :
                game.avant_saut_y1 = 228
        #Joueur 2 :
        if game.entrain_de_sauter2 == False :
            if game.player2.rect.y >= 600 and game.player2.rect.y <= 615 :
                game.avant_saut_y2 = 606
            if game.player2.rect.y >= 320 and game.player2.rect.y <= 463 :
                game.avant_saut_y2 = 380
            if game.player2.rect.y >= 121 and game.player2.rect.y <= 312 :
                game.avant_saut_y2 = 228
            

        #Sauts : 
        #Joueur 1 :
        if game.monte_player1 == True :
            if game.player1.rect.y <= game.avant_saut_y1 - game.player1.hauteur_saut :
                game.monte_player1 = False
                game.descente_player1 = True
            else :
                game.player1.rect.y -= game.player1.speed_saut
                game.entrain_de_sauter1 = True

        if game.descente_player1 == True :
            game.player1.rect.y += game.player1.gravite
            if game.player1.rect.y >= game.avant_saut_y1 :
                game.monte_player1 = False
                game.descente_player1 = False
                game.entrain_de_sauter1 = False
            if game.player1.rect.y >= 380 and (game.player1.rect.x >= 758 and game.player1.rect.x <= 1101) : #Plateforme 1
                game.monte_player1 = False
                game.descente_player1 = False
                game.entrain_de_sauter1 = False
            if game.player1.rect.y >= 227 and (game.player1.rect.x >= 1167 and game.player1.rect.x <= 1510) : #Plateforme 2
                if game.player1.rect.y >= 240 :
                    if game.player1.rect.y >= game.avant_saut_y1 :
                        game.monte_player1 = False
                        game.descente_player1 = False
                        game.entrain_de_sauter1 = False
                    else :
                        game.monte_player1 = False
                        game.descente_player1 = True
                        game.entrain_de_sauter1 = True
                else :
                    game.monte_player1 = False
                    game.descente_player1 = False
                    game.entrain_de_sauter1 = False

        #Joueur 2 :
        if game.monte_player2 == True :
            if game.player2.rect.y <= game.avant_saut_y2 - game.player2.hauteur_saut :
                game.monte_player2 = False
                game.descente_player2 = True
            else :
                game.player2.rect.y -= game.player2.speed_saut
                game.entrain_de_sauter2 = True

        if game.descente_player2 == True :
            game.player2.rect.y += game.player2.gravite
            if game.player2.rect.y >= game.avant_saut_y2 :
                game.monte_player2 = False
                game.descente_player2 = False
                game.entrain_de_sauter2 = False
            if game.player2.rect.y >= 380 and (game.player2.rect.x >= 758 and game.player2.rect.x <= 1101) : #Plateforme 1
                game.monte_player2 = False
                game.descente_player2 = False
                game.entrain_de_sauter2 = False
            if game.player2.rect.y >= 227 and (game.player2.rect.x >= 1167 and game.player2.rect.x <= 1510) : #Plateforme 2
                if game.player2.rect.y >= 240 :
                    if game.player2.rect.y >= game.avant_saut_y2 :
                        game.monte_player2 = False
                        game.descente_player2 = False
                        game.entrain_de_sauter2 = False
                    else :
                        game.monte_player2 = False
                        game.descente_player2 = True
                        game.entrain_de_sauter2 = True
                else :
                    game.monte_player2 = False
                    game.descente_player2 = False
                    game.entrain_de_sauter2 = False

        #Pour les vies :
        #Mario :
        if len(game.vie_mario.tableau_vie_restant) == 3 :
            fenetre.blit(game.vie_mario.tableau_vie_restant[0], game.vie_mario.rect1)
            fenetre.blit(game.vie_mario.tableau_vie_restant[1], game.vie_mario.rect2)
            fenetre.blit(game.vie_mario.tableau_vie_restant[2], game.vie_mario.rect3)
        if len(game.vie_mario.tableau_vie_restant) == 2 :
            fenetre.blit(game.vie_mario.tableau_vie_restant[0], game.vie_mario.rect1)
            fenetre.blit(game.vie_mario.tableau_vie_restant[1], game.vie_mario.rect2)
        if len(game.vie_mario.tableau_vie_restant) == 1 :
            fenetre.blit(game.vie_mario.tableau_vie_restant[0], game.vie_mario.rect1)

        #Luigi :
        if len(game.vie_luigi.tableau_vie_restant) == 3 :
            fenetre.blit(game.vie_luigi.tableau_vie_restant[0], game.vie_luigi.rect1)
            fenetre.blit(game.vie_luigi.tableau_vie_restant[1], game.vie_luigi.rect2)
            fenetre.blit(game.vie_luigi.tableau_vie_restant[2], game.vie_luigi.rect3)
        if len(game.vie_luigi.tableau_vie_restant) == 2 :
            fenetre.blit(game.vie_luigi.tableau_vie_restant[0], game.vie_luigi.rect1)
            fenetre.blit(game.vie_luigi.tableau_vie_restant[1], game.vie_luigi.rect2)
        if len(game.vie_luigi.tableau_vie_restant) == 1 :
            fenetre.blit(game.vie_luigi.tableau_vie_restant[0], game.vie_luigi.rect1)


        #Quand on tombe :
        #Pour mario :
        if game.entrain_de_sauter1 == False and game.monte_player1 == False and game.descente_player1 == False :
            if game.avant_saut_y1 == 380 : #Si sur plateforme 1 :
                if game.player1.rect.x <= 758 or game.player1.rect.x >= 1100 :
                    if game.player1.rect.y <= 606 :
                        game.player1.rect.y += game.player1.speed
            #Si sur plateforme 2 : //problème
            if game.player1.rect.x <= 1167 or game.player1.rect.x >= 1507 :
                if game.player1.rect.y <= 380 :
                    game.player1.rect.y += game.player1.speed
        #Pour luigi :
        if game.entrain_de_sauter2 == False and game.monte_player2 == False and game.descente_player2 == False :
            if game.avant_saut_y2 == 380 : #Si sur plateforme 1 :
                if game.player2.rect.x <= 758 or game.player2.rect.x >= 1100 :
                    if game.player2.rect.y <= 606 :
                        game.player2.rect.y += game.player2.speed
            if game.player2.rect.x <= 1167 or game.player2.rect.x >= 1507 :
                if game.player2.rect.y <= 380 :
                    game.player2.rect.y += game.player2.speed

    pygame.display.flip()
#Events : for event in pygame.event.get() : if event.type == pygame.QUIT : print("Oufff") boucle = False pygame.quit() if event.type == pygame.KEYDOWN : #Déplacements : game.pressed[event.key] = True if event.key == pygame.K_ESCAPE : print("Oufff") boucle = False pygame.quit() #Jeux : if statut == "jeux" : if event.key == pygame.K_z : if game.entrain_de_sauter1 == False : game.monte_player1 = True if event.key == pygame.K_o : if game.entrain_de_sauter2 == False : game.monte_player2 = True if event.key == pygame.K_SPACE : game.ajout_projectile(game.direction_player1, "mario") if event.key == pygame.K_RETURN : game.ajout_projectile(game.direction_player2, "luigi") #Menu : if statut == "menu" : if event.key == pygame.K_RETURN : statut = "jeux" musique_menu.stop() musique_jeux.play(-1) if event.type == pygame.KEYUP : game.pressed[event.key] = False

 
Voici aussi le game.py :

import pygame
from player import Player
from projectile import Projectile
from vie import Vie

class Game(pygame.sprite.Sprite) :

    mario_profil_droite = pygame.image.load("characters/mario_profil_droite.png")
    mario_profil_gauche = pygame.image.load("characters/mario_profil_gauche.png")
    mario_run_droite = pygame.image.load("characters/mario_run_droite.png")
    mario_run_gauche = pygame.image.load("characters/mario_run_gauche.png")

    luigi_profil_droite = pygame.image.load("characters/luigi_profil_droite.png")
    luigi_profil_gauche = pygame.image.load("characters/luigi_profil_gauche.png")
    luigi_run_droite = pygame.image.load("characters/luigi_run_droite.png")
    luigi_run_gauche = pygame.image.load("characters/luigi_run_gauche.png")

    def __init__(self) :
        self.pressed = {}
        self.all_projectile = pygame.sprite.Group()
        self.monte_player1 = False
        self.descente_player1 = False
        self.monte_player2 = False
        self.descente_player2 = False

        self.direction_player1 = "droite"
        self.direction_player2 = "gauche"
        self.avant_saut_y1 = 0
        self.avant_saut_y2 = 0

        self.entrain_de_sauter1 = False
        self.entrain_de_sauter2 = False

        #Au niveau afifchage :
        self.vie_mario = Vie(self, "assets/vie_mario.png", "mario", [20, 80, 140])
        self.vie_luigi = Vie(self, "assets/vie_luigi.png", "luigi", [1410, 1470, 1530])

        #Gestion des players :
        self.player1 = Player("characters/mario_profil_droite.png", 20, 606, 80, 80, "mario")
        self.player2 = Player("characters/luigi_profil_gauche.png", 1480, 603, 60, 90, "luigi")

    def ajout_projectile(self, direction, qui) :
        self.all_projectile.add(Projectile(self, direction, qui))

    def check_collision_sprite(sprite1, sprite2) : #Fonction qui retrun True si il y a collision entre sprite et sprite
        return pygame.sprite.collide_rect(sprite1, sprite2)



-
Edité par LaCoquille33 23 novembre 2020 à 14:40:39

  • Partager sur Facebook
  • Partager sur Twitter
26 novembre 2020 à 12:05:07

D'après le message, l'erreur se situe dans le module sprite, pas dans ton code.
  • Partager sur Facebook
  • Partager sur Twitter

Python c'est bon, mangez-en. 

27 novembre 2020 à 10:36:31

josmiley a écrit:

D'après le message, l'erreur se situe dans le module sprite, pas dans ton code.


Oui c'est ca le problème j'essai de gérer une collision entre 2 sprites mais cela ne marche pas
  • Partager sur Facebook
  • Partager sur Twitter
27 novembre 2020 à 11:48:55

Je ne sais pas ce qu'il faut faire , je n'utilise jamais le module Sprite. Si tu parles anglais essayes de demander sur discord https://discord.gg/qZXhnwa4rZ
  • Partager sur Facebook
  • Partager sur Twitter

Python c'est bon, mangez-en. 

27 novembre 2020 à 14:55:59

ancien sujet du forum (enfin seulement de mai 2020n c'est pas si vieux ^^ ) => https://openclassrooms.com/forum/sujet/attributeerror-4 

il manquait une initialisation de Sprite

un super().__init__() dans le __init__ de Projectile

-
Edité par umfred 27 novembre 2020 à 14:56:56

  • Partager sur Facebook
  • Partager sur Twitter
28 novembre 2020 à 11:08:32

umfred a écrit:

ancien sujet du forum (enfin seulement de mai 2020n c'est pas si vieux ^^ ) => https://openclassrooms.com/forum/sujet/attributeerror-4 

il manquait une initialisation de Sprite

un super().__init__() dans le __init__ de Projectile

-
Edité par umfred il y a environ 20 heures

OHHHH MY GOD merci beaucoup j'été partis dans des réponses complexes alors qu'il manquait en effet l'ini du sprite merci encore tu me sauves xD :)

ALLERT :

Je viens de régler le problème mais un nouveau (petit) vient d'apparaître, j'ai vraiment la poise xD :

cette ligne ne veut pas s'éxécuter :

if not self.game.check_collision_sprite(self.rect, self.game.player2.rect) :

voici le message d'erreur :

pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "/home/remi/Bureau/Oufioo/main.py", line 67, in <module>
    projectile.move()
  File "/home/remi/Bureau/Oufioo/projectile.py", line 29, in move
    if not self.game.check_collision_sprite(self.rect, self.game.player2.rect) :
TypeError: check_collision_sprite() takes 2 positional arguments but 3 were given

voici la fonction check_collision_sprite() qui est dans le fichier game :

def check_collision_sprite(sprite1, sprite2) : #Fonction qui retrun True si il y a collision entre sprite et sprite
        return pygame.sprite.collide_rect(sprite1, sprite2)
le problème est que la j'appelle la fonction check collision sprite en mettant soit disant 3 paramètres alors que je devrai en donner que 2, or j'en donne que 2 (self.rect et self.game.player2.rect) pouvez vous donc m'expliquer d'ou vient le problème svp merci bcp :)



-
Edité par LaCoquille33 28 novembre 2020 à 11:16:14

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
28 novembre 2020 à 11:51:45

Slt,

Il te manque dans ta class

self
def check_collision_sprite(self, sprite1, sprite2) :



-
Edité par Anonyme 28 novembre 2020 à 11:55:32

  • Partager sur Facebook
  • Partager sur Twitter
28 novembre 2020 à 11:57:27

Diablo76 a écrit:

Slt,

Il te manque

self




Merci oui en effet c ca sauf qu'il y a encore un autre problème :

pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "/home/remi/Bureau/Oufioo/main.py", line 67, in <module>
    projectile.move()
  File "/home/remi/Bureau/Oufioo/projectile.py", line 29, in move
    if not self.game.check_collision_sprite(self.rect, self.game.player2.rect) :
  File "/home/remi/Bureau/Oufioo/game.py", line 46, in check_collision_sprite
    return pygame.sprite.collide_rect(sprite1, sprite2)
  File "/usr/lib/python3/dist-packages/pygame/sprite.py", line 1310, in collide_rect
    return left.rect.colliderect(right.rect)
AttributeError: 'pygame.Rect' object has no attribute 'rect'
➜  Oufioo /usr/bin/python3 /home/remi/Bureau/Oufioo/main.py
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "/home/remi/Bureau/Oufioo/main.py", line 67, in <module>
    projectile.move()
  File "/home/remi/Bureau/Oufioo/projectile.py", line 29, in move
    if not self.game.check_collision_sprite(self.rect, self.game.player2.rect) :
  File "/home/remi/Bureau/Oufioo/game.py", line 46, in check_collision_sprite
    return pygame.sprite.collide_rect(sprite1, sprite2)
  File "/usr/lib/python3/dist-packages/pygame/sprite.py", line 1310, in collide_rect
    return left.rect.colliderect(right.rect)
AttributeError: 'pygame.Rect' object has no attribute 'rect'

voici la fonction :

def check_collision_sprite(self, sprite1, sprite2) : #Fonction qui retrun True si il y a collision entre sprite et sprite
        return pygame.sprite.collide_rect(sprite1, sprite2)

et ou je l'appelle :

def move(self) :

        if self.player_actuel == "mario" :
            if self.direction == "droite" :
                if not self.game.check_collision_sprite(self.rect, self.game.player2.rect) :
                    if self.rect.x <= 1600 :
                        self.rect.x = self.rect.x + self.vitesse
                    else :
                        self.remove()
                        print("Suppression !")
                else :
                    self.remove()
                    self.game.player1.vie -= 1
                    print("Collision / Suppression !")
                    #Ajouter bruitage vies
            elif self.direction == "gauche" :
                if not self.game.check_collision_sprite(self.rect, self.game.player2.rect) :
                    if self.rect.x >= 0 :
                        self.rect.x = self.rect.x - self.vitesse
                    else :
                        self.remove()
                        print("Suppression !")
                else :
                    self.remove()
                    self.game.player1.vie -= 1
                    print("Collision / Suppression !")

        elif self.player_actuel == "luigi" :
            if self.direction == "droite" :
                if not self.game.check_collision_sprite(self.rect, self.game.player1.rect) :
                    if self.rect.x <= 1600 :
                        self.rect.x = self.rect.x + self.vitesse
                    else :
                        self.remove()
                        print("Suppression !")
                else :
                    self.remove()
                    self.game.player2.vie -= 1
                    print("Collision / Suppression !")
            if self.direction == "gauche" :
                if not self.game.check_collision_sprite(self.rect, self.game.player1.rect) :
                    if self.rect.x >= 0 :
                        self.rect.x = self.rect.x - self.vitesse
                    else :
                        self.remove()
                        print("Suppression !")
                else :
                    self.remove()
                    self.game.player2.vie -= 1
                    print("Collision / Suppression !")
    

pouvez vous m'aider svp merci :)



  • Partager sur Facebook
  • Partager sur Twitter
30 novembre 2020 à 12:05:50

le message est parlant,non ? la fonction pygame.sprite.collide_rect attend des objets qui ont des rect, mais pas des rect (qui n'ont pas cet attribut, puisqu'ils sont cet attribut)

Il faut donc que tu supprimes le .rect dans tes appels à check_collision_sprite

  • Partager sur Facebook
  • Partager sur Twitter
4 décembre 2020 à 17:36:44

Merci beaucoup en effet c'était ca, il faudra que je m'en rappelle merci :)
  • Partager sur Facebook
  • Partager sur Twitter
5 décembre 2020 à 10:42:49

Désolé de ne pas avoir répondu avant.

Si tu as trouvé la réponse, tu peux mettre le sujet en résolu !

Cordialement,

Yannis300307

  • Partager sur Facebook
  • Partager sur Twitter

Bonjour je suis un humain ! Enfin peut-être que nous vivons dans un univers virtuel et que

ce qu'on croit être, n'est pas ??!!!!