import pyxel

# Classe pour un combattant MMA
class Fighter:
    def __init__(self, x, y, couleur, sprite_rect):
        self.x = x
        self.y = y
        self.couleur = couleur
        self.vie = 20
        self.largeur = sprite_rect[2]
        self.hauteur = sprite_rect[3]
        self.attaque_en_cours = False
        self.direction = 1  # 1 = droite, -1 = gauche
        self.sprite_rect = sprite_rect  # (x_img, y_img, largeur, hauteur)
 
    def deplacer(self, direction):
        self.x += direction * 2
        self.direction = direction
        self.x = max(0, min(self.x, pyxel.width - self.largeur))

    def attaquer(self):
        self.attaque_en_cours = True

    def fin_attaque(self):
        self.attaque_en_cours = False

    def dessiner(self):
        # Dessine le sprite du combattant
        x_img, y_img, w, h = self.sprite_rect
        pyxel.blt(self.x, self.y, 0, x_img, y_img, w, h, 7)

        # Dessine une attque simple en cours
        x_img, y_img, w, h = self.sprite_rect
        if self.attaque_en_cours:
            if self.direction == 1:
                pyxel.blt(self.x, self.y, 0, x_img, y_img, w, h, 7)
            else:
                 pyxel.blt(self.x, self.y, 0, x_img, y_img, w, h, 7)

class MMA_Game:
    def __init__(self):
        pyxel.init(160, 120)  # Pas de caption pour Pyodide
        pyxel.load("res.pyxres")
        
        # Joueur vert (gauche) - sprite (0,81,47,50)
        self.joueur1 = Fighter(20, 68, 8, (0, 80, 47, 50))
    
        # Attaque Joueur vert (gauche) - sprite (200,200,239,249)
        self.attaque_en_cours = Fighter(20, 68, 8, (200, 200, 239, 249))

        # Joueur bleu (droite) - sprite (0,16,48,52)
        self.joueur2 = Fighter(100, 67, 5, (0, 16, 48, 52))

        self.game_over = False
        pyxel.run(self.update, self.draw)

    def update(self):
        if self.game_over:
            return

        # Contrôles joueur 1
        if pyxel.btn(pyxel.KEY_Q):
            self.joueur1.deplacer(-1)
        if pyxel.btn(pyxel.KEY_D):
            self.joueur1.deplacer(1)
        if pyxel.btnp(pyxel.KEY_Z):
            self.joueur1.attaquer()
        else:
            self.joueur1.fin_attaque()   

        # Contrôles joueur 2
        if pyxel.btn(pyxel.KEY_LEFT):
            self.joueur2.deplacer(-1)
        if pyxel.btn(pyxel.KEY_RIGHT):
            self.joueur2.deplacer(1)
        if pyxel.btnp(pyxel.KEY_UP):
            self.joueur2.attaquer()
        else:
            self.joueur2.fin_attaque()

        # Gestion des collisions d'attaque
        self.verifier_attaques()

        # Fin du jeu
        if self.joueur1.vie <= 0 or self.joueur2.vie <= 0:
            self.game_over = True

    def verifier_attaques(self):
        if self.joueur1.attaque_en_cours and self.collision(self.joueur1, self.joueur2):
            self.joueur2.vie -= 1
        if self.joueur2.attaque_en_cours and self.collision(self.joueur2, self.joueur1):
            self.joueur1.vie -= 1

    def collision(self, attaquant, defenseur):
        # Taille de la zone de dégâts
        largeur_zone = 4
        hauteur_zone = 4

        # Position de la zone selon la direction
        if attaquant.direction == 1:  # droite
            ax1 = attaquant.x + attaquant.largeur - largeur_zone
        else:  # gauche
            ax1 = attaquant.x

        ay1 = attaquant.y + attaquant.hauteur // 2 - hauteur_zone // 2

        ax2 = ax1 + largeur_zone
        ay2 = ay1 + hauteur_zone

        # Coordonnées du défenseur
        dx1 = defenseur.x
        dy1 = defenseur.y
        dx2 = dx1 + defenseur.largeur
        dy2 = dy1 + defenseur.hauteur

        # Collision
        return not (ax2 < dx1 or ax1 > dx2 or ay2 < dy1 or ay1 > dy2)

    def draw(self):
        pyxel.cls(pyxel.COLOR_BLACK)
        
        # Dessine le ring en fond
        pyxel.blt(0, 0, 0, 56, 0, 160, 120, 7)

        # Dessine les joueurs
        self.joueur1.dessiner()
        self.joueur2.dessiner()

        # Points de vie
        pyxel.text(10, 10, f"J1 Vie: {self.joueur1.vie}", pyxel.COLOR_WHITE)
        pyxel.text(100, 10, f"J2 Vie: {self.joueur2.vie}", pyxel.COLOR_WHITE)

        # Message de fin
        if self.game_over:
            gagnant = "Joueur 1" if self.joueur1.vie > 0 else "Joueur 2"
            pyxel.text(50, 60, f"{gagnant} gagne!", pyxel.COLOR_YELLOW)


if __name__ == "__main__":
    MMA_Game()