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