import pyxel
import random

# Taille de la fenetre 200x128 pixels
pyxel.init(200, 128, title="Super Smash karam Ultimate")
pyxel.load("res.pyxres")

# Variables du joueur
vaisseau_x = 60
vaisseau_y = 60
tirs_liste = []
est_en_train_de_tirer = False
compteur_animation = 0


niveau_actuel = 1
max_niveaux = 5
etat_jeu = "jeu"  
compteur_transition = 0


ennemi_x = 140
ennemi_y = 50
ennemi_vie = 100
ennemi_vie_max = 100
ennemi_largeur = 48
ennemi_hauteur = 48
ennemi_direction_x = 1
ennemi_direction_y = 1
ennemi_vitesse = 1
compteur_changement_direction = 0

def reinitialiser_ennemi():
    """Réinitialise l'ennemi pour un nouveau niveau"""
    global ennemi_vie, ennemi_vie_max, ennemi_x, ennemi_y, ennemi_vitesse
    global ennemi_direction_x, ennemi_direction_y
    ennemi_vie_max = 100 + (niveau_actuel - 1) * 50  # +50 PV par niveau
    ennemi_vie = ennemi_vie_max
    ennemi_x = 140
    ennemi_y = 50
    ennemi_vitesse = 1 + (niveau_actuel - 1) * 0.3  # Plus rapide à chaque niveau
    ennemi_direction_x = random.choice([-1, 1])
    ennemi_direction_y = random.choice([-1, 1])

def vaisseau_deplacement(x, y):
    """Déplacement avec les touches de directions"""
    if pyxel.btn(pyxel.KEY_RIGHT):
        if x < 184:  
            x = x + 2
    if pyxel.btn(pyxel.KEY_LEFT):
        if x > 0:
            x = x - 2
    if pyxel.btn(pyxel.KEY_DOWN):
        if y < 112:  
            y = y + 2
    if pyxel.btn(pyxel.KEY_UP):
        if y > 0:
            y = y - 2
    return x, y

def tirs_creation(x, y, tirs_liste):
    """Création d'un tir vers la DROITE"""
    global est_en_train_de_tirer
    if pyxel.btnp(pyxel.KEY_SPACE):
        tirs_liste.append([x + 16, y + 6])
        est_en_train_de_tirer = True

def ennemi_deplacement():
    """Déplacement aléatoire de l'ennemi pour esquiver"""
    global ennemi_x, ennemi_y, ennemi_direction_x, ennemi_direction_y
    global compteur_changement_direction
    
    # Changer de direction aléatoirement
    compteur_changement_direction += 1
    if compteur_changement_direction > 60:  # Toutes les 2 secondes
        if random.random() < 0.3:  # 30% de chance de changer
            ennemi_direction_x = random.choice([-1, 1])
        if random.random() < 0.3:
            ennemi_direction_y = random.choice([-1, 1])
        compteur_changement_direction = 0
    
    # Déplacement
    nouvel_x = ennemi_x + ennemi_direction_x * ennemi_vitesse
    nouvel_y = ennemi_y + ennemi_direction_y * ennemi_vitesse
    
    # Rebondir sur les bords (rester dans la moitié droite de l'écran)
    if nouvel_x < 100:  # Limite gauche
        ennemi_direction_x = 1
        nouvel_x = 100
    elif nouvel_x > 200 - ennemi_largeur:  # Limite droite
        ennemi_direction_x = -1
        nouvel_x = 200 - ennemi_largeur
    
    if nouvel_y < 0:  # Limite haut
        ennemi_direction_y = 1
        nouvel_y = 0
    elif nouvel_y > 128 - ennemi_hauteur:  # Limite bas
        ennemi_direction_y = -1
        nouvel_y = 128 - ennemi_hauteur
    
    ennemi_x = nouvel_x
    ennemi_y = nouvel_y

def tirs_deplacement(tirs_liste):
    """Déplacement des tirs vers la DROITE et suppression s'ils sortent du cadre"""
    global ennemi_vie, etat_jeu, niveau_actuel, compteur_transition
    
    tirs_a_supprimer = []
    
    for tir in tirs_liste:
        tir[0] += 4  
        
        
        if (ennemi_x < tir[0] + 4 < ennemi_x + ennemi_largeur and 
            ennemi_y < tir[1] + 4 < ennemi_y + ennemi_hauteur):
            tirs_a_supprimer.append(tir)
            ennemi_vie -= 10
            print(f"💥 Touché! Vie restante: {ennemi_vie}")  
            
           
            if ennemi_vie <= 0:
                ennemi_vie = 0
                if niveau_actuel < max_niveaux:
                    # Passer au niveau suivant
                    etat_jeu = "transition"
                    compteur_transition = 0
                    niveau_actuel += 1
                    tirs_liste.clear()
                else:
                    # Victoire finale
                    etat_jeu = "victoire"
                    tirs_liste.clear()
        
        # Tir sort de l'écran
        elif tir[0] > 208:
            tirs_a_supprimer.append(tir)
    
    # Supprimer les tirs
    for tir in tirs_a_supprimer:
        if tir in tirs_liste:
            tirs_liste.remove(tir)

# =========================================================
# == UPDATE
# =========================================================
def update():
    """Mise à jour des variables (30 fois par seconde)"""
    global vaisseau_x, vaisseau_y, est_en_train_de_tirer, compteur_animation
    global etat_jeu, compteur_transition
    
    if etat_jeu == "jeu":
        vaisseau_x, vaisseau_y = vaisseau_deplacement(vaisseau_x, vaisseau_y)
        tirs_creation(vaisseau_x, vaisseau_y, tirs_liste)
        tirs_deplacement(tirs_liste)
        ennemi_deplacement()  # L'ennemi bouge maintenant!
        
        # Animation de tir
        if est_en_train_de_tirer:
            compteur_animation += 1
            if compteur_animation > 10:  
                est_en_train_de_tirer = False
                compteur_animation = 0
    
    elif etat_jeu == "transition":
        compteur_transition += 1
        if compteur_transition > 90: 
            etat_jeu = "jeu"
            reinitialiser_ennemi()
    
    elif etat_jeu == "victoire":
        
        if pyxel.btnp(pyxel.KEY_SPACE):
            niveau_actuel = 1
            reinitialiser_ennemi()
            vaisseau_x = 60
            vaisseau_y = 60
            tirs_liste.clear()
            etat_jeu = "jeu"

# =========================================================
# == DRAW
# =========================================================
def draw():
    """Création des objets (30 fois par seconde)"""
    pyxel.cls(1)
    
    if etat_jeu == "jeu":
        # Dessiner le vaisseau
        if est_en_train_de_tirer:
            pyxel.blt(vaisseau_x, vaisseau_y, 2, 0, 0, 16, 16, 0)
        else:
            pyxel.blt(vaisseau_x, vaisseau_y, 1, 0, 0, 16, 16, 0)
        
        # Dessiner l'ennemi
        pyxel.blt(ennemi_x, ennemi_y, 0, 0, 0, ennemi_largeur, ennemi_hauteur, 0)
        
        # Barre de vie de l'ennemi
        barre_largeur = 40  
        barre_x = ennemi_x + (ennemi_largeur - barre_largeur) // 2  
        pyxel.rect(barre_x, ennemi_y - 8, barre_largeur, 4, 8)
        vie_largeur = int(barre_largeur * (ennemi_vie / ennemi_vie_max))  
        pyxel.rect(barre_x, ennemi_y - 8, vie_largeur, 4, 11)  
        
        # Dessiner les tirs
        for tir in tirs_liste:
            pyxel.blt(tir[0], tir[1], 2, 16, 0, 8, 8, 0)
        
        # Affichage des infos
        pyxel.text(5, 5, f"Niveau: {niveau_actuel}", 7)
        pyxel.text(5, 13, f"Vie: {ennemi_vie}/{ennemi_vie_max}", 7)
    
    elif etat_jeu == "transition":
        # Écran de transition entre niveaux
        pyxel.cls(5)
        texte1 = f"NIVEAU {niveau_actuel - 1} TERMINE!"
        texte2 = f"NIVEAU {niveau_actuel}"
        texte3 = "Prepare-toi..."
        
        pyxel.text(100 - len(texte1) * 2, 50, texte1, 7)
        pyxel.text(100 - len(texte2) * 2, 65, texte2, 10)
        pyxel.text(100 - len(texte3) * 2, 75, texte3, 6)
    
    elif etat_jeu == "victoire":
      
        pyxel.cls(3)
        texte1 = "VICTOIRE!"
        texte2 = f"Tu as termine les {max_niveaux} niveaux!"
        texte3 = "Appuie sur ESPACE"
        texte4 = "pour rejouer"
        
        
        pyxel.text(100 - len(texte1) * 2, 45, texte1, 7)
        pyxel.text(100 - len(texte2) * 2, 60, texte2, 10)
        pyxel.text(100 - len(texte3) * 2, 75, texte3, 6)
        pyxel.text(100 - len(texte4) * 2, 83, texte4, 6)
        pyxel.playm(0)
        
# Lancement du jeu
pyxel.run(update, draw)