import poorpyxel as ppx
from math import sqrt
from random import randint

class Balle:

    # constructeur
    def __init__(self, x, y, couleur, taille, vx, vy):
        self.x = x # position horizontale
        self.y = y # position verticale
        self.couleur = couleur # indice de la couleur dans la liste 'couleurs'
        self.taille = taille # taille
        self.vx = vx # vitesse horizontale
        self.vy = vy # vitesse verticale
    
        # méthode d'affichage
    def affiche(self):
        ppx.circ(self.x, self.y, self.taille, self.couleur)
    
    def move(self):
        self.x += self.vx # modification des coordonnées
        self.y += self.vy
    
        if self.x <= 0 or self.x > ppx.width: # test atteint la gauche ou la droite
            self.vx = - self.vx
        if self.y <=0 or self.y > ppx.height: # test atteint le haut ou le bas
            self.vy = - self.vy
    
    def rebonds(self, autre_balle):
        dx = autre_balle.x - self.x
        dy = autre_balle.y - self.y
        distance = sqrt(dx**2 + dy**2)
        minDist = autre_balle.taille + self.taille
    
        if (distance < minDist):
            self.vx = -self.vx
            self.vy = -self.vy
            autre_balle.vx = -autre_balle.vx
            autre_balle.vy = -autre_balle.vy	

ppx.init(150, 150)


def update():
    # déplacement des balles
    balle1.move() 
    balle2.move()
    
    # gestion du rebond éventuel l'une sur l'autre
    balle1.rebonds(balle2)
    
    
# fonction d'animation
def draw():
    ppx.cls(0)
    
    # Affichage des balles
    balle1.affiche()
    balle2.affiche()

# PROGRAMME PRINCIPAL

# Instanciations des deux balles
balle1 = Balle(randint(0, ppx.width), randint(0,ppx.height), randint(0,15), randint(5,20), randint(2,5), randint(2,5))
balle2 = Balle(randint(0, ppx.width), randint(0,ppx.height), randint(0,15), randint(5,20), randint(2,5), randint(2,5))

ppx.run(update, draw)	

