I have a car that I want to move left/right/up/down but also diagonally. The first four work perfectly, but when I make It move diagonally, the image doesn't change.
keys = pg.key.get_pressed()
if keys[pg.K_LEFT] or keys[pg.K_q]:
    van.state = VAN_LEFT
    screen.acceleration.x = screen.vitesse
if keys[pg.K_UP] or keys[pg.K_z]:
    van.state = VAN_UP
    screen.acceleration.y = screen.vitesse
if (keys[pg.K_LEFT] or keys[pg.K_q]) and (keys[pg.K_UP] or keys[pg.K_z]):
    van.state = VAN_LEFT_UP
    screen.acceleration.x = screen.vitesse
    screen.acceleration.y = screen.vitesse
if I add in the main loop print(van.state), it will never be van_left_up.
Does anyone know what I'm doing wrong ?
Here is the whole code
VAN_HAUT = 0
VAN_DROITE_HAUT = 1
VAN_DROITE = 2
VAN_DROITE_BAS = 3
VAN_BAS = 4
VAN_GAUCHE_BAS = 5
VAN_GAUCHE = 6
VAN_GAUCHE_HAUT = 7
class Van(object):
    def __init__(self, pos, etat, couleur):
        self.pos = pos
        self.etat = etat
        self.couleur = couleur
    def draw(self, win):
        if self.etat == VAN_HAUT:
            if self.couleur is "bleu":
                win.blit(van_haut_bleu, (self.pos.x, self.pos.y))
        if self.etat == VAN_DROITE_HAUT:
            if self.couleur is "bleu":
                win.blit(van_droite_haut_bleu, (self.pos.x, self.pos.y))
        if self.etat == VAN_DROITE:
            if self.couleur is "bleu":
                win.blit(van_droite_bleu, (self.pos.x, self.pos.y))
                win.blit(van_droite_violet, (self.pos.x, self.pos.y))
        if self.etat == VAN_DROITE_BAS:
            if self.couleur is "bleu":
                win.blit(van_droite_bas_bleu, (self.pos.x, self.pos.y))
        if self.etat == VAN_BAS:
            if self.couleur is "bleu":
                win.blit(van_bas_bleu, (self.pos.x, self.pos.y))
 
        if self.etat == VAN_GAUCHE_BAS:
            if self.couleur is "bleu":
                win.blit(van_gauche_bas_bleu, (self.pos.x, self.pos.y))
 
        if self.etat == VAN_GAUCHE:
            if self.couleur is "bleu":
                win.blit(van_gauche_bleu, (self.pos.x, self.pos.y))
        if self.etat == VAN_GAUCHE_HAUT:
            if self.couleur is "bleu":
                win.blit(van_gauche_haut_bleu, (self.pos.x, self.pos.y))
ECRAN_MAP = 3
class Ecran(object):
    def __init__(self, affiche, position, position_map, velocite, vitesse, acceleration, friction, niveau):
        self.affiche = affiche
        self.position = position
        self.position_map = position_map
        self.velocite = velocite
        self.vitesse = vitesse
        self.acceleration = acceleration
        self.friction = friction
        self.nombre_ecran_intro = 0
        
    def draw(self, win):
        elif self.affiche == ECRAN_MAP:
            win.blit(ecran_carte, (self.position_map.x, self.position_map.y))
            ecran_pos_x = police_du_jeu.render((str(self.position.x)), True, NOIR)
            win.blit(ecran_pos_x, (0, 0))
            ecran_pos_y = police_du_jeu.render((str(self.position.y)), True, NOIR)
            win.blit(ecran_pos_y, (0, 50))
            van.draw(win)
        self.acceleration += self.velocite * self.friction
        self.velocite += self.acceleration
        self.position += self.velocite + 0.5 * self.acceleration
        self.position_map += self.velocite + 0.5 * self.acceleration
        
                
def rgw():
    ecran.draw(win)
    pg.display.update()
ecran = Ecran(ECRAN_INTRO, vec(0, 0), vec(-11810, -2640), vec(0, 0), 0.75, vec(0, 0), -0.12, NIVEAU_NEWYORK)
van = Van(vec(0, 0), VAN_GAUCHE, "bleu")
run = True
while run:
    ecran.acceleration = vec(0, 0)
    for event in pg.event.get():
        if event.type == pg.QUIT:
            run = False
       
    keys = pg.key.get_pressed()
    if (keys[pg.K_LEFT] or keys[pg.K_q]) and (keys[pg.K_UP] or keys[pg.K_z]):
        if ecran.affiche == ECRAN_MAP:
            van.etat = VAN_GAUCHE_HAUT
            ecran.acceleration.x = ecran.vitesse
            ecran.acceleration.y = ecran.vitesse
    
    if keys[pg.K_LEFT] or keys[pg.K_q]:
        if ecran.affiche == ECRAN_JEU:
            joueur.acceleration.x = -joueur.vitesse
        elif ecran.affiche == ECRAN_MAP:
            van.etat = VAN_GAUCHE
            ecran.acceleration.x = ecran.vitesse
            
    if keys[pg.K_RIGHT] or keys[pg.K_d]:
        if ecran.affiche == ECRAN_JEU:
            joueur.acceleration.x = joueur.vitesse
        elif ecran.affiche == ECRAN_MAP:
            van.etat = VAN_DROITE
            ecran.acceleration.x = -ecran.vitesse
    
    if keys[pg.K_UP] or keys[pg.K_z]:
        if ecran.affiche == ECRAN_JEU:
            if joueur.collide is True or joueur.side_collide is True:
                joueur.collide = False
                joueur.side_collide = False
                joueur.velocite.y = -19
        elif ecran.affiche == ECRAN_MAP:
            van.etat = VAN_HAUT
            ecran.acceleration.y = ecran.vitesse
            
    if keys[pg.K_DOWN] or keys[pg.K_s]:
        if ecran.affiche == ECRAN_MENU:
            ecran.affiche = ECRAN_SHOP
        elif ecran.affiche == ECRAN_JEU:
            joueur.action = EST_BAISSE
        elif ecran.affiche == ECRAN_MAP:
            van.etat = VAN_BAS
            ecran.acceleration.y = -ecran.vitesse
    rgw()
    clock.tick(IPS)
    
pg.quit()
I removed all the modules imported, the images loaded and the classes that doesn't concern the van and the screen. What is left is the only things that concern directly the van and the map that moves.
 
    