lesmiserablesetkayouI (Carnot 2026, Premiere, amélioré)

Attention

Ce projet est un travail réalisé après les 6 heures imparties le jour de la Nuit du Code. Il s'agit de finir le projet pour dépasser la frustration du temps limite.

UNIVERS / THÈME CHOISI

Tower defense

MODE D'EMPLOI

  • espace ==> fait apparaître une vague
  • A ==> mode de construction de pion
  • Z ==> mode de construction de fou
  • E ==> mode de construction de cavalier
  • R ==> mode de construction de tour
  • clique gauche ==> place la pièce sélectionnée

Les pièces doivent être placées en dehors des chemins.

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,"chess tower deffence by Lesmisérabletkayou")

p.load("theme.pyxres")

#===================================================================================================================================================================
#=================================================================== CONSTANTES ====================================================================================
#===================================================================================================================================================================

nv_p = 1
a_supprimer = []
Game_Over = 0



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

att_pion = 10
att_fou = 30
att_caval = 40
att_tour = 50
att_dame = 100

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

vie_max_roi = 200

sousous_par_seconde = 2

p.mouse(True)

rotate_herbe = []
for i in range(256):
    rotate_herbe.append((p.rndi(1,4)-1)*90)
deco_fond = []
for i in range(256):
    deco_fond.append(p.rndi(1,30))
#===================================================================================================================================================================
#=================================================================== VARIABLES =====================================================================================
#===================================================================================================================================================================

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)]
pos_roi = chemin[len(chemin)-1]

sousous = 500
vie_roi = vie_max_roi

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

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

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

vague = {}
fil_dattente = { (1,1) : [0, 1], (2, 1) : [0, 2], (1,2) : [0, 1], (3, 1) : [0, 3],  (1, 3) : [0, 1], (4, 1) : [0, 4], (4, 2) : [0, 4], (1, 4) : [0, 1], (1, 5) : [0, 1], (1, 6) : [0, 1], (5, 1) : [0, 5]}
clee_suppr = ""

# 0 = en jeu; 1 = premier menu; 2 = menue de choix des niveau

menu = 1

t_bouton_lvl1 = False
t_bouton_lvl2 = False
t_bouton_lvl3 = False
t_bouton_lvl4 = False
t_bouton_lvl5 = False
t_bouton_lvl6 = False

t_bouton_home = False
t_bouton_jouer = False

couldown_bouton = 0
#niveau : (droit de jour , stars)
lvl = {1 : (True, 0), 2 : (False, 0), 3 : (False, 0), 4 : (False, 0), 5 : (False, 0), 6 : (False, 0)}



#===================================================================================================================================================================
#=================================================================== FONCTION =======================================================================================
#===================================================================================================================================================================
def reset_all():
    global vague, sousous, sousous_par_seconde ,vie_roi, pos_roi, nv_p, build, a_supprimer, Game_Over, clee_suppr, menu, t_bouton_jouer, t_bouton_home, fil_dattente
    global tourx, toury, pionx, piony, cavalx, cavaly, damex, damey, foux, fouy, couldown_bouton
    global tmps_pion, tmps_fou, tmps_caval, tmps_tour, tmps_dame
    global t_bouton_lvl1, t_bouton_lvl2, t_bouton_lvl3, t_bouton_lvl4, t_bouton_lvl5, t_bouton_lvl6

    sousous = 500
    vie_roi = vie_max_roi

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

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

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

    vague = {}
    fil_dattente = { (1,1) : [0, 1], (2, 1) : [0, 2], (1,2) : [0, 1], (3, 1) : [0, 3],  (1, 3) : [0, 1], (4, 1) : [0, 4], (4, 2) : [0, 4], (1, 4) : [0, 1], (1, 5) : [0, 1], (1, 6) : [0, 1], (5, 1) : [0, 5]}
    clee_suppr = ""
    Game_Over = 0

    lvl_actuel = 0



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

def lvl1():
    global fil_dattente, chemin, lvl_actuel
    fil_dattente = { (1,1) : [0, 1], (2, 1) : [0, 2], (1,2) : [0, 1], (3, 1) : [0, 3],  (1, 3) : [0, 1], (4, 1) : [0, 4], (4, 2) : [0, 4], (1, 4) : [0, 1], (1, 5) : [0, 1], (1, 6) : [0, 1], (5, 1) : [0, 5]}
    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)]
    lvl_actuel = 1

def lvl2():
    global fil_dattente, chemin, lvl_actuel
    fil_dattente
    chemin
    lvl_actuel = 2

def lvl3():
    global fil_dattente, chemin, lvl_actuel
    fil_dattente
    chemin
    lvl_actuel = 3

def lvl4():
    global fil_dattente, chemin, lvl_actuel
    fil_dattente
    chemin
    lvl_actuel = 4

def lvl5():
    global fil_dattente, chemin, lvl_actuel
    fil_dattente
    chemin
    lvl_actuel = 5

def lvl6():
    global fil_dattente, chemin, lvl_actuel
    fil_dattente
    chemin
    lvl_actuel = 6


#===================================================================================================================================================================
#=================================================================== UPDATES =======================================================================================
#===================================================================================================================================================================


def update():
    global vague, sousous, sousous_par_seconde ,vie_roi, pos_roi, nv_p, build, a_supprimer, Game_Over, clee_suppr, menu, t_bouton_jouer, t_bouton_home, fil_dattente, couldown_bouton
    global tourx, toury, pionx, piony, cavalx, cavaly, damex, damey, foux, fouy
    global tmps_pion, tmps_fou, tmps_caval, tmps_tour, tmps_dame
    global t_bouton_lvl1, t_bouton_lvl2, t_bouton_lvl3, t_bouton_lvl4, t_bouton_lvl5, t_bouton_lvl6

    cle_suppr = None
    if menu == 0:
        if Game_Over == 0:
            # Déplace les ennemis de la fil d'attente à la vague
            for cle, val in fil_dattente.items():
                if 0 not in [v[0] for v in vague.values()]:
                    vague[cle] = val
                    clee_suppr = cle
                    break
            # supprime l'ennemie de la fil d'attente
            if clee_suppr != "":
                del fil_dattente[clee_suppr]
                clee_suppr = ""

            # systeme de game over
            if vie_roi <= 0 :
                Game_Over  = -1

            # S'il n'y a plus d'ennemi le joueur a gagné
            if len(vague) + len(fil_dattente) == 0:
                Game_Over = 1

            # degat au roi
            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

            # Supprime la piece une fois qu'il atteint le roi
            if pos_piece(cle_suppr) == pos_roi :
                del vague[cle_suppr]

            # deplacement des pieces
            for piece, case in vague.items():
                    tipe,_ = piece
                    if p.frame_count % 15 == 0 and not tipe == 2:
                        if not tipe == 0 :
                            vague[piece][0] += 1
                    elif p.frame_count % 10 == 0 and tipe == 2:
                        vague[piece][0] += 1

            # fait apparaitre un pion
            if p.KEY_SPACE in p.input_keys :
                vague[(1, nv_p)] = [0, vie_pion]
                nv_p += 1


            # Entrer en mode de construction
            if p.KEY_A in p.input_keys :
                build = 1 # Pion
                pionx, piony = 512, 512
                foux, fouy = 512, 512
                cavalx, cavaly = 512, 512
                tourx, toury = 512, 512
                damex, damey = 512, 512
            elif p.KEY_Z in p.input_keys :
                build = 2 # Fou
                pionx, piony = 512, 512
                foux, fouy = 512, 512
                cavalx, cavaly = 512, 512
                tourx, toury = 512, 512
                damex, damey = 512, 512
            elif p.KEY_E in p.input_keys :
                build = 3 # Cavalier
                pionx, piony = 512, 512
                foux, fouy = 512, 512
                cavalx, cavaly = 512, 512
                tourx, toury = 512, 512
                damex, damey = 512, 512
            elif p.KEY_R in p.input_keys :
                build = 4 # Tour
                pionx, piony = 512, 512
                foux, fouy = 512, 512
                cavalx, cavaly = 512, 512
                tourx, toury = 512, 512
                damex, damey = 512, 512
            elif p.KEY_T in p.input_keys :
                build = 5 # Reine
                pionx, piony = 512, 512
                foux, fouy = 512, 512
                cavalx, cavaly = 512, 512
                tourx, toury = 512, 512
                damex, damey = 512, 512

            # Pose une piece
            pos_att_pion = piony//16,pionx//16
            pos_att_fou = fouy//16,foux//16
            pos_att_caval = cavaly//16,cavalx//16
            pos_att_tour = toury//16,tourx//16
            pos_att_dame = damey//16,damex//16

            if build == 1 and p.btn(p.MOUSE_BUTTON_LEFT) and (sousous-prix_pion) >= 0 and not (pos_att_pion in chemin):
                sousous -= prix_pion
                tmps_pion = 0
                build = 0

            elif build == 2 and p.btn(p.MOUSE_BUTTON_LEFT) and (sousous-prix_fou) >= 0 and not (pos_att_fou in chemin):
                sousous -= prix_fou
                build = 0
                tmps_fou = 0

            elif build == 3 and p.btn(p.MOUSE_BUTTON_LEFT)  and (sousous-prix_caval) >= 0 and not (pos_att_caval in chemin):
                sousous -= prix_caval
                build = 0
                tmps_caval = 0

            elif build == 4 and p.btn(p.MOUSE_BUTTON_LEFT)  and (sousous-prix_tour) >= 0 and not (pos_att_tour in chemin):
                sousous -= prix_tour
                tmps_tour = 0
                build = 0

            elif build == 5 and p.btn(p.MOUSE_BUTTON_LEFT)  and (sousous-prix_dame) >= 0 and not (pos_att_dame in chemin):
                sousous -= prix_dame
                tmps_dame = 0
                build = 0

            # Remplace la sourie par l'image de la piece selectionnee
            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

            #COLISION
            a_supprimer =  []
            #tour et dame en ligne
            if tmps_tour == 35 or tmps_dame == 35:
                for piece in vague:
                    x,y = pos_piece(piece)
                    if (y*16 == tourx or x*16 == toury) or (y*16 == damex or x*16 == damey):
                        vague[piece][1] -= 1

            #pion
            if tmps_pion == 35:
                for piece in vague:
                    y,x = pos_piece(piece)
                    if (pionx+16 == x*16 and piony-16 == y*16) or (pionx-16 == x*16 and piony-16 == y*16):
                        vague[piece][1] -= 1

            #diagonale de la dame et fou
            if tmps_dame == 35 or tmps_fou == 35:
                for piece in vague:
                    y,x = pos_piece(piece)
                    for i in range(16):
                        if (damex+(i*16) == x*16 and damey+(i*16) == y*16) or (foux+(i*16) == x*16 and fouy+(i*16) == y*16):
                            vague[piece][1] -= 1
                        elif (damex-(i*16) == x*16 and damey-(i*16) == y*16) or (foux-(i*16) == x*16 and fouy-(i*16) == y*16):
                            vague[piece][1] -= 1
                        elif (damex+(i*16) == x*16 and damey-(i*16) == y*16) or (foux+(i*16) == x*16 and fouy-(i*16) == y*16):
                            vague[piece][1] -= 1
                        elif (damex-(i*16) == x*16 and damey-(i*16) == y*16) or (foux-(i*16) == x*16 and fouy-(i*16) == y*16):
                            vague[piece][1] -= 1

            #cavalier attention bordel
            if tmps_caval == 35:
                for piece in vague:
                    y,x = pos_piece(piece)
                    y = y*16
                    x = x*16
                    if (cavalx == x and cavaly == y) or (cavalx+16 == x and cavaly == y) or (cavalx-16 == x and cavaly == y) or (cavalx == x and cavaly-16 == y) or (cavalx == x and cavaly+16 == y) or (cavalx+32 == x and cavaly == y) or (cavalx-32 == x and cavaly == y) or (cavalx == x and cavaly-32 == y) or (cavalx == x and cavaly+32 == y) or (cavalx+16 == x and cavaly+32 == y) or (cavalx-16 == x and cavaly+32 == y) or (cavalx+16 == x and cavaly-32 == y) or (cavalx-16 == x and cavaly-32 == y) or (cavalx+32 == x and cavaly-16 == y) or (cavalx+32 == x and cavaly+16 == y) or (cavalx-32 == x and cavaly-16 == y) or (cavalx-32 == x and cavaly+16 == y):
                        vague[piece][1] -= 1

            # Si une pièce n'a plus de vie on l'ajoute à a_supprimer
            for piece in vague:
                if vague[piece][1] <= 0:
                    a_supprimer.append(piece)

            # Donne des sousous à la mort d'une pièce
            for piece in a_supprimer:
                del vague[piece]
                sousous += 2

            #maj des tmps
            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

            #génération sousous
            if p.frame_count%30 == 0:
                sousous += sousous_par_seconde


        elif Game_Over == 1:
            #bouton home
            if 190<(p.mouse_x//16)*16<210 and 20<(p.mouse_y//16)*16<50:
                t_bouton_home = True
                if p.btn(p.MOUSE_BUTTON_LEFT):
                    menu = 1
            else:
                t_bouton_home = False
            if lvl_actuel != 6:
                _,star_lvl_apres = lvl[lvl_actuel+1]
            _,star_lvl_actuel = lvl[lvl_actuel]

            if vie_roi/vie_max_roi*100 <= 50 and star_lvl_actuel <= 1:
                lvl[lvl_actuel] = (True,1)
                lvl[lvl_actuel+1] = (True,star_lvl_apres)
            elif vie_roi/vie_max_roi*100 < 100 and star_lvl_actuel <= 2:
                lvl[lvl_actuel] = (True,2)
                lvl[lvl_actuel+1] = (True,star_lvl_apres)
            elif vie_roi/vie_max_roi*100 == 100 and star_lvl_actuel <= 3:
                lvl[lvl_actuel] = (True,3)
                lvl[lvl_actuel+1] = (True,star_lvl_apres)


        elif Game_Over == -1:
            #bouton home
            if 190<(p.mouse_x//16)*16<210 and 20<(p.mouse_y//16)*16<50:
                t_bouton_home = True
                if p.btn(p.MOUSE_BUTTON_LEFT):
                    menu = 1
            else:
                t_bouton_home = False



    elif menu == 1:
        #détecter si la souris est sur le bouton jouer
        if 80<(p.mouse_x//16)*16<160 and 80<(p.mouse_y//16)*16<115:
            t_bouton_jouer = True
            if p.btn(p.MOUSE_BUTTON_LEFT):
                menu = 2
                reset_all()
                couldown_bouton = 3
        else:
            t_bouton_jouer = False

    #selection des niveau
    elif menu == 2:
        #lvl 1
        locked,_ = lvl[1]
        if 60<(p.mouse_x//16)*16<90 and 70<(p.mouse_y//16)*16<110 and couldown_bouton == 0:
            t_bouton_lvl1 = True
            if p.btn(p.MOUSE_BUTTON_LEFT) and locked == True:
                menu = 0
                reset_all()
                lvl1()
        else:
            t_bouton_lvl1 = False
        #lvl 2
        locked,_ = lvl[2]
        if 110<(p.mouse_x//16)*16<140 and 70<(p.mouse_y//16)*16<110 and couldown_bouton == 0:
            t_bouton_lvl2 = True
            if p.btn(p.MOUSE_BUTTON_LEFT) and locked == True:
                menu = 0
                reset_all()
                lvl2()
        else:
            t_bouton_lvl2 = False
        #lvl 3
        locked,_ = lvl[3]
        if 160<(p.mouse_x//16)*16<190 and 70<(p.mouse_y//16)*16<110 and couldown_bouton == 0:
            t_bouton_lvl3 = True
            if p.btn(p.MOUSE_BUTTON_LEFT) and locked == True:
                menu = 0
                reset_all()
                lvl3()
        else:
            t_bouton_lvl3 = False

        #lvl 4
        locked,_ = lvl[4]
        if 60<(p.mouse_x//16)*16<90 and 130<(p.mouse_y//16)*16<170 and couldown_bouton == 0:
            t_bouton_lvl4 = True
            if p.btn(p.MOUSE_BUTTON_LEFT) and locked == True:
                menu = 0
                reset_all()
                lvl4()
        else:
            t_bouton_lvl4 = False
        #lvl 5
        locked,_ = lvl[5]
        if 110<(p.mouse_x//16)*16<140 and 130<(p.mouse_y//16)*16<170 and couldown_bouton == 0:
            t_bouton_lvl5 = True
            if p.btn(p.MOUSE_BUTTON_LEFT) and locked == True:
                menu = 0
                reset_all()
                lvl5()
        else:
            t_bouton_lvl5 = False
        #lvl 6
        if 160<(p.mouse_x//16)*16<190 and 130<(p.mouse_y//16)*16<170 and couldown_bouton == 0:
            t_bouton_lvl6 = True
            locked,_ = lvl[6]
            if p.btn(p.MOUSE_BUTTON_LEFT) and locked == True:
                menu = 0
                reset_all()
                lvl6()
        else:
            t_bouton_lvl6 = False
        if couldown_bouton > 0:
            couldown_bouton -= 1

#===================================================================================================================================================================
#=================================================================== FONCTION DRAW =======================================================================================
#===================================================================================================================================================================



def affsousou():
    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 affperdu():
    p.cls(5)
    p.text(100,100,"Tu as perdu",10)
    p.blt(116, 130, 2, 16, 32, 16, 16, 3, scale=5)
    if t_bouton_home:
        p.blt(200,50,2,40,16,16,16,3,scale=2)
    else:
        p.blt(200,50,2,40,0,16,16,3,scale=2)

def affgagne():
    p.cls(5)
    p.text(100,100,"Tu as gagnée!",10)
    p.blt(116, 130, 2, 0, 32, 16, 16, 3, scale=5)
    if t_bouton_home:
        p.blt(200,30,2,40,16,16,16,3,scale=2)
    else:
        p.blt(200,30,2,40,0,16,16,3,scale=2)

    _,star = lvl[lvl_actuel]
    if star == 0:
        p.blt(100,175,2,8,64,8,8,3,scale=2)
        p.blt(120,175,2,8,64,8,8,3,scale=2)
        p.blt(140,175,2,8,64,8,8,3,scale=2)
    elif star == 1:
        p.blt(100,175,2,0,64,8,8,3,scale=2)
        p.blt(120,175,2,8,64,8,8,3,scale=2)
        p.blt(140,175,2,8,64,8,8,3,scale=2)
    elif star == 2:
        p.blt(100,175,2,0,64,8,8,3,scale=2)
        p.blt(120,175,2,0,64,8,8,3,scale=2)
        p.blt(140,175,2,8,64,8,8,3,scale=2)
    elif star == 3:
        p.blt(100,175,2,0,64,8,8,3,scale=2)
        p.blt(120,175,2,0,64,8,8,3,scale=2)
        p.blt(140,175,2,0,64,8,8,3,scale=2)





def affbossbar():
    p.rect(17,199,202,8,0)
    p.rect(18,200,vie_roi/vie_max_roi*200,6,2)

def afffond():
    case = 0
    for i in range(16):
        for j in range(16):

            p.blt(i*16,j*16,0,0,0,16,16,rotate=rotate_herbe[case])
            if deco_fond[case] <= 2:
                p.blt(i*16,j*16,0,0,64,16,16,3)
            elif deco_fond[case] == 4:
                p.blt(i*16,j*16,0,16,80,16,16,0)
            elif deco_fond[case] == 5:
                p.blt(i*16,j*16,0,48,80,16,16,0)
            elif deco_fond[case] == 6:
                p.blt(i*16,j*16,0,0,80,16,16,0)
            elif deco_fond[case] == 3:
                p.blt(i*16,j*16,0,64,80,16,16,0)
            elif deco_fond[case] == 7:
                p.blt(i*16,j*16,0,32,80,16,16,0)
            case += 1
    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
        vie = vague[piece][1]
        #pion
        if tipe == 1:
            p.blt(xpiece*16,ypiece*16,1,0,80,16,16,3)
        #fou
        if tipe == 2:
            if vie == 2:
                p.blt(xpiece*16,ypiece*16,1,0,96,16,16,3)
            elif vie == 1:
                p.blt(xpiece*16,ypiece*16,1,16,96,16,16,3)
        #cavalier
        if tipe == 3:
            if vie == 3:
                p.blt(xpiece*16,ypiece*16,1,0,112,16,16,3)
            elif vie == 2:
                p.blt(xpiece*16,ypiece*16,1,16,112,16,16,3)
            elif vie == 1:
                p.blt(xpiece*16,ypiece*16,1,32,112,16,16,3)
        #tour
        if tipe == 4:
            if vie == 4:
                p.blt(xpiece*16,ypiece*16,1,0,128,16,16,3)
            elif vie == 3:
                p.blt(xpiece*16,ypiece*16,1,16,128,16,16,3)
            elif vie == 2:
                p.blt(xpiece*16,ypiece*16,1,32,128,16,16,3)
            elif vie == 1:
                p.blt(xpiece*16,ypiece*16,1,48,128,16,16,3)
        #dame
        if tipe == 5:
            if vie == 5:
                p.blt(xpiece*16,ypiece*16,1,0,144,16,16,3)
            elif vie == 4:
                p.blt(xpiece*16,ypiece*16,1,16,144,16,16,3)
            elif vie == 3:
                p.blt(xpiece*16,ypiece*16,1,32,144,16,16,3)
            elif vie == 2:
                p.blt(xpiece*16,ypiece*16,1,48,144,16,16,3)
            elif vie == 1:
                p.blt(xpiece*16,ypiece*16,1,64,144,16,16,3)



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


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

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


def afffou():
    global foux, fouy
    if tmps_fou < 5:
        p.blt(foux,fouy,1,0,64,16,16,3)
    elif tmps_fou < 10:
        p.blt(foux,fouy,1,16,64,16,16,3)
    elif tmps_fou < 15:
        p.blt(foux,fouy,1,32,64,16,16,3)
    elif tmps_fou < 20:
        p.blt(foux,fouy,1,48,64,16,16,3)
    elif tmps_fou < 25:
        p.blt(foux,fouy,1,64,64,16,16,3)
    elif tmps_fou < 30:
        p.blt(foux,fouy,1,80,64,16,16,3)
    elif tmps_fou < 40:
        for i in range(16):
            p.blt(foux+(i*16),fouy+(i*16),1,112,0,16,16,3,rotate=45,scale=1.5)
            p.blt(foux-(i*16),fouy+(i*16),1,112,0,16,16,3,rotate=135,scale=1.5)
            p.blt(foux+(i*16),fouy-(i*16),1,112,0,16,16,3,rotate=135,scale=1.5)
            p.blt(foux-(i*16),fouy-(i*16),1,112,0,16,16,3,rotate=45,scale=1.5)
        p.blt(foux,fouy,1,96,0,16,16,3,rotate=45,scale=1.5)
        if tmps_fou == 39:
            foux = 512
            fouy = 512
    else:
        p.blt(foux,fouy,1,0,64,16,16,3)

def affcaval():
    global cavalx,cavaly
    if tmps_caval < 5:
        p.blt(cavalx,cavaly,1,0,48,16,16,3)
    elif tmps_caval < 10:
        p.blt(cavalx,cavaly,1,16,48,16,16,3)
    elif tmps_caval < 15:
        p.blt(cavalx,cavaly,1,32,48,16,16,3)
    elif tmps_caval < 20:
        p.blt(cavalx,cavaly,1,48,48,16,16,3)
    elif tmps_caval < 25:
        p.blt(cavalx,cavaly,1,64,48,16,16,3)
    elif tmps_caval < 30:
        p.blt(cavalx,cavaly,1,80,48,16,16,3)
    elif tmps_caval < 40:
        p.blt(cavalx,cavaly,1,96,48,16,16,3)
        p.blt(cavalx+16,cavaly,1,112,48,16,16,3)
        p.blt(cavalx-16,cavaly,1,112,48,16,16,3)
        p.blt(cavalx,cavaly+16,1,112,48,16,16,3,rotate=90)
        p.blt(cavalx,cavaly-16,1,112,48,16,16,3,rotate=90)

        p.blt(cavalx+32,cavaly,1,128,48,16,16,3)
        p.blt(cavalx-32,cavaly,1,128,48,16,16,3,rotate=180)
        p.blt(cavalx,cavaly+32,1,128,48,16,16,3,rotate=90)
        p.blt(cavalx,cavaly-32,1,128,48,16,16,3,rotate=270)

        p.blt(cavalx+32,cavaly-16,1,144,48,16,16,3)
        p.blt(cavalx+32,cavaly+16,1,144,48,16,16,3,rotate=180)
        p.blt(cavalx-32,cavaly-16,1,144,48,16,16,3)
        p.blt(cavalx-32,cavaly+16,1,144,48,16,16,3,rotate=180)
        p.blt(cavalx+16,cavaly-32,1,144,48,16,16,3,rotate=90)
        p.blt(cavalx-16,cavaly-32,1,144,48,16,16,3,rotate=270)
        p.blt(cavalx+16,cavaly+32,1,144,48,16,16,3,rotate=90)
        p.blt(cavalx-16,cavaly+32,1,144,48,16,16,3,rotate=270)


        if tmps_caval == 39:
            cavalx = 512
            cavaly = 512
    else:
        p.blt(cavalx,cavaly,1,0,48,16,16,3)

def bouton_jouer():
    if t_bouton_jouer:
        p.blt(107,100,2,0,96,40,18,3,scale=2)
    else:
        p.blt(107,100,2,0,80,40,16,3,scale=2)


def affchoixlvl():
    p.cls(5)
    lvllock,_ = lvl[1]
    if lvllock == False:
        p.blt(70,90,2,0,48,16,16,3,scale=2)
    elif lvllock == True:
        if t_bouton_lvl1 == True:
            p.blt(70,90,2,16,64,16,16,3,scale=2)
        else:
            p.blt(70,90,2,16,48,16,16,3,scale=2)
    lvllock,_ = lvl[2]
    if lvllock == False:
        p.blt(120,90,2,0,48,16,16,3,scale=2)
    elif lvllock == True:
        if t_bouton_lvl2:
            p.blt(120,90,2,32,64,16,16,3,scale=2)
        else:
            p.blt(120,90,2,32,48,16,16,3,scale=2)
    lvllock,_ = lvl[3]
    if lvllock == False:
        p.blt(170,90,2,0,48,16,16,3,scale=2)
    elif lvllock == True:
        if t_bouton_lvl3:
            p.blt(170,90,2,48,64,16,16,3,scale=2)
        else:
            p.blt(170,90,2,48,48,16,16,3,scale=2)
    lvllock,_ = lvl[4]
    if lvllock == False:
        p.blt(70,150,2,0,48,16,16,3,scale=2)
    elif lvllock == True:
        if t_bouton_lvl4:
            p.blt(70,150,2,64,64,16,16,3,scale=2)
        else:
            p.blt(70,150,2,64,48,16,16,3,scale=2)
    lvllock,_ = lvl[5]
    if lvllock == False:
        p.blt(120,150,2,0,48,16,16,3,scale=2)
    elif lvllock == True:
        if t_bouton_lvl5:
            p.blt(120,150,2,80,64,16,16,3,scale=2)
        else:
            p.blt(120,150,2,80,48,16,16,3,scale=2)
    lvllock,_ = lvl[6]
    if lvllock == False:
        p.blt(170,150,2,0,48,16,16,3,scale=2)
    elif lvllock == True:
        if t_bouton_lvl6:
            p.blt(170,150,2,96,64,16,16,3,scale=2)
        else:
            p.blt(170,150,2,96,48,16,16,3,scale=2)



def stars():
    _,star = lvl[1]
    if star == 0:
        p.blt(64,115,2,8,64,8,8,3)
        p.blt(74,115,2,8,64,8,8,3)
        p.blt(84,115,2,8,64,8,8,3)
    elif star == 1:
        p.blt(64,115,2,0,64,8,8,3)
        p.blt(74,115,2,8,64,8,8,3)
        p.blt(84,115,2,8,64,8,8,3)
    elif star == 2:
        p.blt(64,115,2,0,64,8,8,3)
        p.blt(74,115,2,0,64,8,8,3)
        p.blt(84,115,2,8,64,8,8,3)
    elif star == 3:
        p.blt(64,115,2,0,64,8,8,3)
        p.blt(74,115,2,0,64,8,8,3)
        p.blt(84,115,2,0,64,8,8,3)


    _,star = lvl[2]
    if star == 0:
        p.blt(114,115,2,8,64,8,8,3)
        p.blt(124,115,2,8,64,8,8,3)
        p.blt(134,115,2,8,64,8,8,3)
    elif star == 1:
        p.blt(114,115,2,0,64,8,8,3)
        p.blt(124,115,2,8,64,8,8,3)
        p.blt(134,115,2,8,64,8,8,3)
    elif star == 2:
        p.blt(114,115,2,0,64,8,8,3)
        p.blt(124,115,2,0,64,8,8,3)
        p.blt(134,115,2,8,64,8,8,3)
    elif star == 3:
        p.blt(114,115,2,0,64,8,8,3)
        p.blt(124,115,2,0,64,8,8,3)
        p.blt(134,115,2,0,64,8,8,3)


    _,star = lvl[3]
    if star == 0:
        p.blt(164,115,2,8,64,8,8,3)
        p.blt(174,115,2,8,64,8,8,3)
        p.blt(184,115,2,8,64,8,8,3)
    elif star == 1:
        p.blt(164,115,2,0,64,8,8,3)
        p.blt(174,115,2,8,64,8,8,3)
        p.blt(184,115,2,8,64,8,8,3)
    elif star == 2:
        p.blt(164,115,2,0,64,8,8,3)
        p.blt(174,115,2,0,64,8,8,3)
        p.blt(184,115,2,8,64,8,8,3)
    elif star == 3:
        p.blt(164,115,2,0,64,8,8,3)
        p.blt(174,115,2,0,64,8,8,3)
        p.blt(184,115,2,0,64,8,8,3)


    _,star = lvl[4]
    if star == 0:
        p.blt(64,175,2,8,64,8,8,3)
        p.blt(74,175,2,8,64,8,8,3)
        p.blt(84,175,2,8,64,8,8,3)
    elif star == 1:
        p.blt(64,175,2,0,64,8,8,3)
        p.blt(74,175,2,8,64,8,8,3)
        p.blt(84,175,2,8,64,8,8,3)
    elif star == 2:
        p.blt(64,175,2,0,64,8,8,3)
        p.blt(74,175,2,0,64,8,8,3)
        p.blt(84,175,2,8,64,8,8,3)
    elif star == 3:
        p.blt(64,175,2,0,64,8,8,3)
        p.blt(74,175,2,0,64,8,8,3)
        p.blt(84,175,2,0,64,8,8,3)

    _,star = lvl[5]
    if star == 0:
        p.blt(114,175,2,8,64,8,8,3)
        p.blt(124,175,2,8,64,8,8,3)
        p.blt(134,175,2,8,64,8,8,3)
    elif star == 1:
        p.blt(114,175,2,0,64,8,8,3)
        p.blt(124,175,2,8,64,8,8,3)
        p.blt(134,175,2,8,64,8,8,3)
    elif star == 2:
        p.blt(114,175,2,0,64,8,8,3)
        p.blt(124,175,2,0,64,8,8,3)
        p.blt(134,175,2,8,64,8,8,3)
    elif star == 3:
        p.blt(114,175,2,0,64,8,8,3)
        p.blt(124,175,2,0,64,8,8,3)
        p.blt(134,175,2,0,64,8,8,3)


    _,star = lvl[6]
    if star == 0:
        p.blt(164,175,2,8,64,8,8,3)
        p.blt(174,175,2,8,64,8,8,3)
        p.blt(184,175,2,8,64,8,8,3)
    elif star == 1:
        p.blt(164,175,2,0,64,8,8,3)
        p.blt(174,175,2,8,64,8,8,3)
        p.blt(184,175,2,8,64,8,8,3)
    elif star == 2:
        p.blt(164,175,2,0,64,8,8,3)
        p.blt(174,175,2,0,64,8,8,3)
        p.blt(184,175,2,8,64,8,8,3)
    elif star == 3:
        p.blt(164,175,2,0,64,8,8,3)
        p.blt(174,175,2,0,64,8,8,3)
        p.blt(184,175,2,0,64,8,8,3)

#==================================================================================================================================================================
#=================================================================== DRAW ==========================================================================================
#===================================================================================================================================================================



def draw():
    global chemin, vague, sousous, vie_roi, pos_roi, nv_p, build
    global tourx, toury, pionx, piony, cavalx, cavaly, 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
    if menu == 0:
        if Game_Over == 0:
            afffond()
            affchemine()
            affpiecevague()
            affbossbar()
            affsousou()
            afftour()
            affpion()
            affdame()
            afffou()
            affcaval()
        elif Game_Over == -1:
            affperdu()
        elif Game_Over == 1:
            affgagne()
    elif menu == 1:
        p.cls(5)
        bouton_jouer()
    elif menu == 2:
        affchoixlvl()
        stars()

p.run(update,draw)