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()