import pyxel

# ---------- LOGIQUE DU JEU ----------
def creer_pile_vide():
    return []

def est_vide(lst):
    return lst == []

def empiler(liste, valeur):
    liste.append(valeur) 

def depiler(liste):
    if not est_vide(liste):
        return liste.pop()

def start():
    nim = creer_pile_vide()
    for i in range(12):
        empiler(nim, "|")
    return nim

# ---------- INTERFACE GRAPHIQUE ----------
class JeuNim:
    def __init__(self):
        self.nim = start()
        self.joueur = 1
        self.selection = 1  # Nombre de bâtons sélectionnés (1 à 3)
        self.message = ""
        pyxel.init(160, 120, title="Jeu du Nim")
        pyxel.run(self.update, self.draw)

    def update(self):
        # Flèches gauche/droite pour choisir combien de bâtons enlever
        if pyxel.btnp(pyxel.KEY_LEFT):
            if self.selection > 1:
                self.selection -= 1
        if pyxel.btnp(pyxel.KEY_RIGHT):
            if self.selection < 3:
                self.selection += 1

        # Barre d’espace pour valider le coup
        if pyxel.btnp(pyxel.KEY_SPACE):
            if self.selection > len(self.nim):
                self.message = "Pas assez de bâtons."
            else:
                for _ in range(self.selection):
                    depiler(self.nim)
                if len(self.nim) == 0:
                    self.message = f"Joueur {self.joueur} a perdu !"
                else:
                    self.joueur = 2 if self.joueur == 1 else 1
                    self.message = ""

    def draw(self):
        pyxel.cls(0)

        # Afficher les bâtons
        for i in range(len(self.nim)):
            x = 10 + i * 10
            pyxel.rect(x, 40, 2, 20, 7)

        # Afficher joueur courant et sélection
        pyxel.text(5, 10, f"Joueur: {self.joueur}", 11)
        pyxel.text(5, 20, f"Enlever: {self.selection} bâton(s)", 10)
        pyxel.text(5, 75, "Prendre le dernier baton = perdu !", 14)
        pyxel.text(5, 90, "Fleches = nbr de batons à retirer", 5)
        pyxel.text(5, 100, "Espace = valider", 5)

        # Afficher message si fin du jeu ou erreur
        if self.message:
            pyxel.text(10, 110, self.message, pyxel.frame_count % 16)

# Lancer le jeu
JeuNim()