lesmiserablesetkayou (Carnot 2026, Premiere)

UNIVERS / THÈME CHOISI

Tower defense

MODE D'EMPLOI

  • espace ==> fait apparaître une vague
  • 1 ==> mode de construction de pion
  • 4 ==> mode de construction de tour
  • clique gauche ==> place la pièce sélectionnée

bonne chance

PRÉSENTATION / EXPLICATIONS

Les échecs sont devenus un tower defense. Placez vos pièces à fin d'éliminer les pièces adverses, elles effectueront une attaque selon leur déplacement dans le jeu d'échec.

Ceci n'est pas un jeu, c'est une expérience artistique. Il n'a nulle prétention d'amusement, et est comparable à une banane scotchée à un mur de brique, qui pourrit lentement tandis que son code, ses entrailles sont malmenées par les actions du joueur.

boum

Code Python
import pyxel as p

p.init(256,256,"nuit du code")

p.load("theme.pyxres")

tmps_tour = 0
chemin = [(1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (2,7), (3,7), (4,7), (5,7), (6,7), (7,7), (8,7), (9,7), (9, 6), (9,5), (9,4), (9,3), (8, 3), (7, 3), (6, 3), (5, 3), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (4, 10), (4, 11), (4, 12), (4, 13), (4, 14), (5, 14), (6, 14), (7, 14), (8, 14), (9, 14), (10, 14), (11, 14), (12, 14), (13, 14), (14, 14), (14, 13), (14, 12), (14, 11), (14, 10), (14, 9), (14, 8), (14,7), (14,6)]
vague = {(1,1) : 5, (1,2) : 7, (1, 3) : 8}
nv_p = 1
a_supprimer = []
Game_Over = 0

def pos_piece(nom_piece) :
    if nom_piece == None :
        return None
    global chemin, vague
    return chemin[vague[nom_piece]]


sousous = 50
vie_roi = 1000
pos_roi = (14, 6)

prix_pion = 5
prix_fou = 15
prix_caval = 20
prix_tour = 35
prix_dame = 75

att_pion = 1
att_fou = 3
att_caval = 4
att_tour = 5
att_dame = 10

vie_pion = 1
vie_fou = 2
vie_caval = 3
vie_tour = 4
vie_dame = 5

pionx, piony = 256, 256
foux, fouy = 256, 256
cavalx, cavaly = 256, 256
tourx, toury = 256, 256
damex, damey = 256, 256

tmps_pion = 40
tmps_fou = 40
tmps_caval = 40
tmps_tour = 40
tmps_dame = 40

pion_at : False 
fou_at : False 
caval_at : False 
tour_at : False 
dame_at : False

build = 0 #1 pion, 2fou, 3 caval, 4tour, 5 dame

def update():
    global chemin, vague, sousous, vie_roi, pos_roi, nv_p, build, a_supprimer
    global tourx, toury, pionx, piony, cavalx, cavaly, tourx, toury, damex, damey
    global prix_pion, prix_fou, prix_caval, prix_tour, prix_dame, att_pion, att_fou, att_caval, att_tour, att_dame, vie_pion
    global tmps_pion, tmps_fou, tmps_caval, tmps_tour, tmps_dame, pion_at, fou_at, caval_at, tour_at, dame_at
    cle_suppr = None

    if vie_roi <= 0 :
        Game_Over  = -1

    for piece, case in vague.items() :
        tipe,_ = piece
        if pos_piece(piece) == pos_roi :
            cle_suppr = piece
            if tipe == 1 :
                vie_roi -= att_pion
            elif tipe == 2 :
                vie_roi -= att_fou
            elif tipe == 3 :
                vie_roi -= att_caval
            elif tipe == 4 :
                vie_roi -= att_tour
            elif tipe == 5 :
                vie_roi -= att_dame
    if pos_piece(cle_suppr) == pos_roi :
        del vague[cle_suppr]
    if p.frame_count % 15 == 0:
        for piece, case in vague.items():
            tipe,_ = piece
            if not tipe == 0 :
                vague[piece] += 1

    if p.KEY_SPACE in p.input_keys :
        vague[(1, nv_p)] = 0
        nv_p += 1

    if p.KEY_1 in p.input_keys :
        build = 1
    elif p.KEY_2 in p.input_keys :
        build = 2
    elif p.KEY_3 in p.input_keys :
        build = 3
    elif p.KEY_4 in p.input_keys :
        build = 4
    elif p.KEY_5 in p.input_keys :
        build = 5

    if p.MOUSE_BUTTON_LEFT in p.input_keys and build == 1 :
        sousous -= prix_pion
        tmps_pion = 0
        build = 0
    elif p.MOUSE_BUTTON_LEFT in p.input_keys and build == 2 :
        sousous -= prix_fou
        build = 0
        tmps_fou = 0
    elif p.MOUSE_BUTTON_LEFT in p.input_keys and build == 3 :
        sousous -= prix_caval
        build = 0
        tmps_caval = 0
    elif build == 4 and p.btn(p.MOUSE_BUTTON_LEFT) :
        sousous -= prix_tour
        tmps_tour = 0
        build = 0
    elif p.MOUSE_BUTTON_LEFT in p.input_keys and build == 5 :
        sousous -= prix_dame
        tmps_dame = 0
        build = 0


    if build == 1 :
        pionx, piony = (p.mouse_x//16)*16, (p.mouse_y//16)*16
    elif build == 2 :
        foux, fouy = (p.mouse_x//16)*16, (p.mouse_y//16)*16
    elif build == 3 :
        cavalx, cavaly = (p.mouse_x//16)*16, (p.mouse_y//16)*16
    elif build == 4 :
        tourx, toury = (p.mouse_x//16)*16, (p.mouse_y//16)*16
    elif build == 5 :
        damex, damey = (p.mouse_x//16)*16, (p.mouse_y//16)*16
    a_supprimer =  []
    for piece in vague:
        if 30<tmps_tour<40 :
            x, y = pos_piece(piece)
            if x == tourx//16 or y == toury//16 :
                a_supprimer.append(piece)
    for piece in a_supprimer :
        del vague[piece]


    if tmps_pion < 40 :
        tmps_pion += 1
    if tmps_fou < 40 :
        tmps_fou += 1
    if tmps_caval < 40 :
        tmps_caval += 1
    if tmps_tour < 40 :
        tmps_tour += 1
    if tmps_dame < 40 :
        tmps_dame += 1

    print(build)
    print(pionx, piony)



def sousou():
    p.rect(208,16,48,16,0)
    p.blt(208,16,0,32,0,16,16,3)
    p.text(224,22,str(sousous),2)

def perdu():
    p.cls(0)
    p.text(100,100,"Tu a perdu",2)




def affbossbar():
    p.rect(17,200,202,8,0)
    p.rect(18,201,vie_roi/5,6,2)

def afffond():
    for i in range(16):
        for j in range(16):
            p.blt(i*16,j*16,0,0,0,16,16)
    p.blt(3*16,16*13,0,0,16,48,48,3)



def affchemine():
    for coord in chemin:
        ychemin,xchemin = coord
        p.blt(xchemin*16,ychemin*16,0,16,0,16,16)

def affpiecevague():
    for piece, case in vague.items():

        ypiece,xpiece = pos_piece(piece)
        tipe,_ = piece
        if tipe == 1:
            p.blt(xpiece*16,ypiece*16,1,0,0,16,16,3)



def afftour():
    global tourx, toury
    if tmps_tour < 5:
        p.blt(tourx,toury,1,0,16,16,16,3)
    elif tmps_tour < 10:
        p.blt(tourx,toury,1,16,16,16,16,3)
    elif tmps_tour < 15:
        p.blt(tourx,toury,1,32,16,16,16,3)
    elif tmps_tour < 20:
        p.blt(toury,toury,1,48,16,16,16,3)
    elif tmps_tour < 25:
        p.blt(tourx,toury,1,64,16,16,16,3)
    elif tmps_tour < 30:
        p.blt(tourx,toury,1,80,16,16,16,3)
    elif tmps_tour < 40:
        for i in range(16):
            p.blt(i*16,toury,1,96,16,16,16,3)
        for i in range(16):
            p.blt(tourx,i*16,1,96,16,16,16,3,rotate=90)
        p.blt(tourx,toury,1,112,16,16,16,3)
        if tmps_tour == 39:
            tourx = 256
            toury = 256

    else:
        p.blt(tourx,toury,1,0,16,16,16,3)


def affpion():
    if tmps_pion < 5:
        p.blt(pionx,piony,1,0,32,16,16,3)
    elif tmps_pion < 10:
        p.blt(pionx,piony,1,16,32,16,16,3)
    elif tmps_pion < 15:
        p.blt(pionx,piony,1,32,32,16,16,3)
    elif tmps_pion < 20:
        p.blt(piony,piony,1,48,32,16,16,3)
    elif tmps_pion < 25:
        p.blt(pionx,piony,1,64,32,16,16,3)
    elif tmps_pion < 30:
        p.blt(pionx,piony,1,80,32,16,16,3)
    elif tmps_pion < 40:
        p.blt(pionx+16,piony+16,1,112,32,16,16,3)
        p.blt(pionx-16,piony+16,1,128,32,16,16,3)
        p.blt(pionx,piony,1,96,32,16,16,3)
    else:
        p.blt(pionx,piony,1,0,32,16,16,3)

def affdame():
    if  tmps_dame < 5:
        p.blt(damex,damey,1,0,48,16,16,3)
    elif tmps_dame < 10:
        p.blt(damex,damey,1,16,48,16,16,3)
    elif tmps_dame < 15:
        p.blt(damex,damey,1,32,48,16,16,3)
    elif tmps_dame < 20:
        p.blt(damey,damey,1,48,48,16,16,3)
    elif tmps_dame < 25:
        p.blt(tourx,damey,1,64,48,16,16,3)
    elif tmps_dame < 30:
        p.blt(damex,damey,1,80,48,16,16,3)
    elif tmps_dame < 40:
        for i in range(16):
            p.blt(i,damey,1,96,16,16,16,3)
        for i in range(16):
            p.blt(damex,i,1,96,16,16,16,3,rotate=90)
        for i in range(16):
            p.blt(damex+i,damey+i,1,112,48,16,16,3)
            p.blt(damex-i,damey+i,1,112,48,16,16,3)
            p.blt(damex+i,damey-i,1,112,48,16,16,3)
            p.blt(damex-i,damey-i,1,112,48,16,16,3)
    else:
        p.blt(damex,damey,1,0,96,48,16,3)


def draw():
    global chemin, vague, sousous, vie_roi, pos_roi, nv_p, build
    global tourx, toury, pionx, piony, cavalx, cavaly, tourx, toury, damex, damey
    global prix_pion, prix_fou, prix_caval, prix_tour, prix_dame, att_pion, att_fou, att_caval, att_tour, att_dame, vie_pion
    global tmps_pion, tmps_fou, tmps_caval, tmps_tour, tmps_dame, pion_at, fou_at, caval_at, tour_at, dame_at
    afffond()
    affchemine()
    affpiecevague()
    affbossbar()
    sousou()
    afftour()
    affpion()
    affdame()
    if Game_Over == -1 :
        perdu()


p.run(update,draw)