# Pyxel Studio
"""Héloïse DENIEL et Mélanie LE CAM """
"""LES BG DE l'A300"""

import pyxel, random

# Initialisation des variables
WIDTH = 256
HEIGHT = 256
TITLE = "Zelda"
NOMBRES_COFFRES = 5
vie = 4

# initialisation des tirs
tirs_liste = []

# initialisation des ennemis
ennemis_liste = []

# initialisation des explosions
explosions_liste = [] 

# Position de Zelda
zelda_x = 96
zelda_y = 176
score = 0

coffres = []
for i in range(NOMBRES_COFFRES):
    coffres.append({
        "x": random.randint(0, WIDTH - 8),
        "y": random.randint(0, HEIGHT - 8),
        "ouvert": False
    })

pyxel.init(WIDTH, HEIGHT, TITLE)
pyxel.load("res.pyxres")

def zelda_deplacement(x, y):
    if pyxel.btn(pyxel.KEY_RIGHT) and x < WIDTH - 8:
        x += 1
    if pyxel.btn(pyxel.KEY_LEFT) and x > 0:
        x -= 1
    if pyxel.btn(pyxel.KEY_DOWN) and y < HEIGHT - 8:
        y += 1
    if pyxel.btn(pyxel.KEY_UP) and y > 0:
        y -= 1
    return x, y

def tirs_creation(x, y, tirs_liste):
    if pyxel.btnr(pyxel.KEY_SPACE): 
        tirs_liste.append([x + 4, y - 4])
    return tirs_liste

def tirs_deplacement(tirs_liste):
    for tir in tirs_liste[:]: 
        tir[1] -= 1
        if tir[1] < -8:
            tirs_liste.remove(tir)
    return tirs_liste

def ennemis_creation(ennemis_liste):
    if pyxel.frame_count % 30 == 0:
        ennemis_liste.append([random.randint(0, WIDTH - 8), 0])
    return ennemis_liste

def ennemis_deplacement(ennemis_liste):
    for ennemi in ennemis_liste[:]:
        ennemi[1] += 1
        if ennemi[1] > HEIGHT:
            ennemis_liste.remove(ennemi)
    return ennemis_liste

def explosions_creation(x, y):
    explosions_liste.append([x, y, 0])

def ennemis_suppression():
    for ennemi in ennemis_liste[:]:
        for tir in tirs_liste[:]:
            if ennemi[0] <= tir[0] + 1 and ennemi[0] + 8 >= tir[0] and ennemi[1] + 8 >= tir[1]:
                ennemis_liste.remove(ennemi)
                tirs_liste.remove(tir)
                explosions_creation(ennemi[0], ennemi[1])

def update():
    global zelda_x, zelda_y, score, tirs_liste, ennemis_liste

    zelda_x, zelda_y = zelda_deplacement(zelda_x, zelda_y)

    # collision avec coffres
    for coffre in coffres:
        if not coffre["ouvert"]:
            if abs(zelda_x - coffre["x"]) < 8 and abs(zelda_y - coffre["y"]) < 8:
                coffre["ouvert"] = True
                score += 1

    # tirs
    tirs_liste = tirs_creation(zelda_x, zelda_y, tirs_liste)
    tirs_liste = tirs_deplacement(tirs_liste)

    # ennemis
    ennemis_liste = ennemis_creation(ennemis_liste)
    ennemis_liste = ennemis_deplacement(ennemis_liste)

    # suppression si contact tir/ennemi
    ennemis_suppression()

def draw():
    pyxel.cls(0)
    pyxel.bltm(0, 0, 0, 0, 0, 256, 256, 0)  
    pyxel.blt(zelda_x, zelda_y, 0, 0, 0, 8, 8, 0)

    # coffres
    for coffre in coffres:
        if not coffre["ouvert"]:
            pyxel.blt(coffre["x"], coffre["y"], 0, 16, 40, 8, 8, 11)
        else:
            pyxel.blt(coffre["x"], coffre["y"], 0, 8, 40, 8, 8, 11)

    # tirs
    for tir in tirs_liste:
        pyxel.rect(tir[0], tir[1], 1, 4, 10)

    # ennemis
    for ennemi in ennemis_liste:
        pyxel.blt(ennemi[0], ennemi[1], 0, 16, 48, 8, 8, 11)

    # score
    pyxel.text(5, 5, f"Score: {score}/{NOMBRES_COFFRES}", 0)

    if score == NOMBRES_COFFRES:
        pyxel.rect(0, 0, WIDTH, HEIGHT, 0)
        pyxel.text(WIDTH // 2 - 60, HEIGHT // 2, "TOUS LES COFFRES SONT OUVERTS !", 7)
        
pyxel.run(update, draw)