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)