Cookies (Carnot 2026, Premiere)

UNIVERS / THÈME CHOISI

Tower Defense

MODE D'EMPLOI

Cliquer = apparition du personnage à l'endroit cliqué

PRÉSENTATION / EXPLICATIONS

Des cookies attaquent une maison. Une dame âgée doit la défendre (nous contrôlons son déplacement) à l'aide d'un homme âgé qui ne bouge pas, près de la maison. Il y a un compteur qui, lorsqu'il atteint 10, fait apparaître un deuxième homme âgé (lui non plus ne bouge pas). Les cookies disparaissent au bout de 3 coups (ils se font manger lorsqu'ils se trouvent près d'un personnage). 2 cookies arrivent à la maison et c'est game over.

Code Python
import pyxel

# taille de la fenetre 128x128 pixels
pyxel.init(128, 128, title="Nuit du Code")
pyxel.load("theme.pyxres")

base_x = 0
base_y = 0
base_vie = 2
cookies=[]
game_over = False
perso_x = -50
perso_y = -50
argent = 0
monsieur_x = 10
monsieur_y = 10
m2_x = -50
m2_y = -50


def deplacement():
    for i in range(len(cookies)):
        cookie_x, cookie_y, vie = cookies[i]
        if cookie_y > 96:
            cookie_y -= 1
        if cookie_x > 32 and cookie_y == 96:
            cookie_x -= 1
        if cookie_y > 72 and cookie_x == 32:
            cookie_y -= 1
        if cookie_x < 96 and cookie_y == 72:
            cookie_x += 1
        if cookie_y > 40 and cookie_x == 96:
            cookie_y -= 1
        if cookie_x > 0 and cookie_y == 40:
            cookie_x -= 1
        if cookie_y > 0 and cookie_x == 0:
            cookie_y -= 1
        cookies[i] = cookie_x, cookie_y, vie


def update():
    global cookies, game_over, perso_x, perso_y, base_vie, argent, monsieur_x, monsieur_y, m2_x, m2_y

    deplacement()

    if pyxel.frame_count % 100 == 0:
        cookies.append((96,136,3))

    for i in range(len(cookies)):
        cookie_x, cookie_y, vie = cookies[i]

        pyxel.mouse(visible=True)

        if pyxel.btn(pyxel.MOUSE_BUTTON_LEFT):
            perso_x = pyxel.mouse_x
            perso_y = pyxel.mouse_y

        if cookie_y <= 6:
            base_vie -= 1
            cookie_x = 96
            cookie_y = 136
            if base_vie == 0:
                game_over = True
            cookies[i] = cookie_x, cookie_y, vie

        if pyxel.sqrt((cookie_x - perso_x)**2 + (cookie_y - perso_y)**2) < 30:
            if pyxel.frame_count % 32 == 0:
                vie -= 1
                if vie == 0:
                    cookie_x = 96
                    cookie_y = 136
                    vie = 3
                    argent += 1
                cookies[i] = cookie_x, cookie_y, vie
                break

        if pyxel.sqrt((cookie_x - monsieur_x)**2 + (cookie_y - monsieur_y)**2) < 30:
            if pyxel.frame_count % 32 == 0:
                vie -= 1
                if vie == 0:
                    cookie_x = 96
                    cookie_y = 136
                    vie = 3
                    argent += 1
                cookies[i] = cookie_x, cookie_y, vie
                break

        if argent == 10:
            m2_x = 104
            m2_y = 56

        if pyxel.sqrt((cookie_x - m2_x)**2 + (cookie_y - m2_y)**2) < 30:
            if pyxel.frame_count % 16 == 0:
                vie -= 1
                if vie == 0:
                    cookie_x = 96
                    cookie_y = 136
                    vie = 3
                    argent += 1
                cookies[i] = cookie_x, cookie_y, vie
                break

        cookies[i] = cookie_x, cookie_y, vie

def draw():
    pyxel.bltm(0, 0, 0, 0, 0, 128, 128, 0) #map

    if game_over == True:
        pyxel.cls(0)
        pyxel.text(45, 45, "GAME OVER", 8)

    else:
        for i in range(len(cookies)):
            cookie_x, cookie_y, vie = cookies[i]
            if vie == 3:
                pyxel.blt(cookie_x, cookie_y, 0, 0, 0, 8, 8, 0)
            if vie == 2:
                pyxel.blt(cookie_x, cookie_y, 0, 8, 0, 8, 8, 0)
            elif vie == 1:
                pyxel.blt(cookie_x, cookie_y, 0, 16, 0, 8, 8, 0)

        s = pyxel.frame_count % 30 #Madame
        if s < 10:
            pyxel.blt(perso_x, perso_y, 0, 0, 32, 8, 8, 0)
        elif s < 20:
            pyxel.blt(perso_x, perso_y, 0, 8, 32, 8, 8, 0)
        else:
            pyxel.blt(perso_x, perso_y, 0, 16, 32, 8, 8, 0)

        pyxel.text(104, 1, str(argent), 0)

        u = pyxel.frame_count % 30 #fleur anime
        if u < 5:
            pyxel.blt(24, 56, 0, 0, 16, 8, 8)
        elif u < 10:
            pyxel.blt(24, 56, 0, 8, 16, 8, 8)
        elif u < 15:
            pyxel.blt(24, 56, 0, 16, 16, 8, 8)
        elif u < 20:
            pyxel.blt(24, 56, 0, 24, 16, 8, 8)
        elif u < 25:
            pyxel.blt(24, 56, 0, 16, 16, 8, 8)
        else:
            pyxel.blt(24, 56, 0, 8, 16, 8, 8)

        t=pyxel.frame_count %30 #Monsieur
        if t < 10:
            pyxel.blt(10, 10, 0, 0, 40, 8, 8)
        elif t < 20:
            pyxel.blt(10, 10, 0, 8, 40, 8, 8)
        else:
            pyxel.blt(10, 10, 0, 16, 40, 8, 8)

        z=pyxel.frame_count %30 #Monsieur2
        if z < 10:
            pyxel.blt(m2_x, m2_y, 0, 0, 40, 8, 8)
        elif z < 20:
            pyxel.blt(m2_x, m2_y, 0, 8, 40, 8, 8)
        else:
            pyxel.blt(m2_x, m2_y, 0, 16, 40, 8, 8)

        v = pyxel.frame_count % 50 #maison anime
        if v < 25:
            pyxel.blt(base_x, base_y, 0, 0, 24, 8, 8)
        else:
            pyxel.blt(base_x, base_y, 0, 8, 24, 8, 8)

        a=pyxel.blt(120, 0, 0, 0, 8, 8, 8) #coeur droit
        b=pyxel.blt(112, 0, 0, 0, 8, 8, 8) #coeur gauche
        if base_vie == 1:
            a=pyxel.blt(120, 0, 0, 8, 8, 8, 8)



pyxel.run(update, draw)
pyxel.show()