les randoms (Pontus 2026, Premiere)
UNIVERS / THÈME CHOISI
Thème: Tower defense
MODE D'EMPLOI
- Appuyer sur clique gauche pour placer une tour qui coûte 20 argents.
- Eliminer un ennemi vous rapportera 5 argents.
- Les ennemis auront de plus en plus de vie au fil du temps.
- Au bout de 3 ennemis qui ont réussis à atteindre la maison, la partie sera perdue. (c'est impossible)
PRÉSENTATION / EXPLICATIONS
Dans un monde où les poissons ont réussi à muté... Ils sont très méchants. Une équipe de chercheur a réussi à trouver un remède. Malheureusement les poissons ont retrouvés la base des scientifiques, c'est à vous de défendre la base pour l'avenir de l'humanité ! Bonne chance !
Code Python
import pyxel
from copy import deepcopy
# taille de la fenetre 128x128 pixels
pyxel.init(128,128, title="Nuit du Code",fps=30)
pyxel.load("theme.pyxres")
pyxel.mouse(True)
grille=[[True for _ in range(16)] for i in range(16)]
for i in range(16):grille[0][i]=False
grille[1][15]=False
grille[2][15]=False
for i in range(16):grille[3][i]=False
grille[4][0]=False
grille[5][0]=False
for i in range(16):grille[6][i]=False
grille[7][15]=False
grille[8][15]=False
for i in range(16):grille[9][i]=False
grille[10][0]=False
grille[11][0]=False
for i in range(16):grille[12][i]=False
grille[12][15]=False
grille[13][15]=False
grille[14][15]=False
grille[15][15]=False
grille[14][14]=False
grille[15][14]=False
Pv=20
argent = 100
vie = 3
ENEMY = {
'Pv':0,
'Vx':0,
'Vy':0,
'x':0,
'y':0,
'revenukill':0,
'type':0,
'dim_x':8,
'dim_y':8,
}
tours = {
'coup':0,
'degas':0,
'Vatt':0,
'porte':0,
'lvl':0,
'placer':False,
'x':0,
'y':0,
}
TIR= {'x':0,
'y':0,
'dim_x':5,
'dim_y':1,
"ennemi":None}
nb=5
tour_placer=[]
liste_e=[]
liste_tir=[]
def temps():
global Pv
x=0
if (pyxel.frame_count%30==00):
x+=1
Pv+=x
def creation_enemy():
liste_e=[]
for i in range(1,4):
en=deepcopy(ENEMY)
en['Pv'] = 100
en['Vx'] = 0
en['Vy'] = 0
en['x'] = 0
en['y'] = 0
en['revenukill'] = i*20
en['type'] = i
liste_e.append(en)
return liste_e
def creation_tours():
liste_t=[]
for i in range(1,4):
en=deepcopy(tours)
en['coup'] = i*20
en['degas'] = 0
en['Vatt'] = 0
en['porte'] = 2
en['lvl'] = 0
liste_t.append(en)
return liste_t
def place_tour(liste_tour,tour_placer,grille):
global argent
h= pyxel.mouse_x//8
b= pyxel.mouse_y//8
if 0>h or h>15 or 0>b or b>15:
return argent
if grille[h][b] and pyxel.btn(pyxel.MOUSE_BUTTON_LEFT) and liste_tour[0]['coup']<=argent :
grille[h][b]=False
argent=argent-20
t=deepcopy(liste_tour[0])
t["x"]=h*8
t["y"]=b*8
tour_placer.append(t)
return argent
def portee_tour(t):
return (t["x"]-t["porte"]*8,t["y"]-t["porte"]*8,t["x"]+t["porte"]*8,t["y"]+t["porte"]*8)
def ennemi_in_zone(e,z):
if z[0]<=e["x"]<= z[2] and z[1]<=e["y"]<= z[3]:
return True
return False
def tir_tour(t,e,liste_tir):
if ennemi_in_zone(e,portee_tour(t)) and (pyxel.frame_count%15==00):
tir=deepcopy(TIR)
tir['x']=t['x']
tir['y']=t['y']
tir['ennemi']=e
liste_tir.append(tir)
def tir_tous(liste_t,liste_e,liste_tir):
for t in liste_t:
for e in liste_e:
tir_tour(t,e,liste_tir)
def collision(objet_1, objet_2):
if ( objet_1["x"]-objet_2["dim_x"] <= objet_2["x"] <= objet_1["x"]+objet_1["dim_x"] ) and ( objet_1["y"]-objet_2["dim_y"] <= objet_2["y"] <= objet_1["y"]+objet_1["dim_y"] ):
return True
elif ( objet_1["x"] <= objet_2["x"]+objet_2["dim_x"] <= objet_1["x"]+objet_1["dim_x"] ) and ( objet_1["y"] <= objet_2["y"]+objet_2["dim_y"] <= objet_1["y"]+objet_1["dim_y"] ):
return True
else :
return False
def deplacement(enemy):
Vx=0
Vy=0
if 8>enemy["x"]>=0 and enemy["y"]<120:
Vy+=1
elif 24>enemy["x"]>=0 and enemy["y"]>=120:
Vx+=1
elif 32>enemy["x"]>=24 and enemy["y"]>0:
Vy-=1
elif 48>enemy["x"]>=24 and enemy["y"]<=0:
Vx+=1
elif 56>enemy["x"]>=48 and enemy["y"]<120:
Vy+=1
elif 72>enemy["x"]>=48 and enemy["y"]>=120:
Vx+=1
elif 80>enemy["x"]>=72 and enemy["y"]>0:
Vy-=1
elif 96>enemy["x"]>=72 and enemy["y"]<=0:
Vx+=1
elif 110>enemy["x"]>=96 and enemy["y"]<120:
Vy+=1
elif 118>enemy["x"]>=96 and enemy["y"]>=120:
Vx+=1
enemy["x"]+=Vx
enemy["y"]+=Vy
return enemy
def deplacement_enemy(liste_e):
global vie
for e in liste_e:
e=deplacement(e)
if e["x"]>116:
liste_e.remove(e)
vie -=1
return liste_e
def creation_E(liste_e, nb):
global Pv
if nb>0 and (pyxel.frame_count%15==00):
e=deepcopy(ENEMY)
e["Pv"]=Pv
liste_e.append(e)
nb-=1
return liste_e
def deplacement_tir(liste_tir):
for t in liste_tir :
if t["x"]< t["ennemi"]["x"]+2:
t["x"]+=2
elif t["x"]>= t["ennemi"]["x"]+2:
t["x"]-=2
if t["y"]< t["ennemi"]["y"]+2:
t["y"]+=2
elif t["y"]>= t["ennemi"]["y"]+2:
t["y"]-=2
def ennemi_toucher(liste_e ,liste_tir,Pv):
global argent
for t in liste_tir:
for e in liste_e:
if collision(e,t):
e["Pv"]-=20
liste_tir.remove(t)
if e["Pv"]<=0:
liste_e.remove(e)
argent= argent+2
def draw():
global tour_placer , liste_e,liste_tir,vie,argent
pyxel.cls(0)
pyxel.blt(0,0,0,0,0,128,128)
pyxel.text(80,10,"argent: "+str(argent),8)
for t in tour_placer:
pyxel.blt(t["x"],t["y"],0,0,144,8,8,0)
for e in liste_e:
pyxel.blt(e["x"],e["y"],0,0,128,8,8,0)
for tir in liste_tir:
pyxel.blt(tir["x"],tir["y"],0,18,139,5,1,0)
if vie <=0:
pyxel.text(64,64,"Game over",7)
def update():
global tour_placer,grille, nb,liste_e,liste_tir,vie,argent
if vie>0:
liste_e=creation_E(liste_e, nb)
liste_e=deplacement_enemy(liste_e)
tir_tous(tour_placer,liste_e,liste_tir)
deplacement_tir(liste_tir)
ennemi_toucher(liste_e ,liste_tir,Pv)
type_tour=creation_tours()
argent=place_tour(type_tour,tour_placer,grille)
temps()
pyxel.run(draw,update)
pyxel.show()