def drop(evt): global val, image, affich_compt canvas.coords(image, board[val].posX * h, board[val].posY * h) position_v[0], position_v[1] = None, None bornes[0], bornes[1] = None, None val, image = -2, 0 # on réinitialise toutes nos valeurs canvas.delete(affich_compt) texte = "Nombre de déplacements = " + str(compteur) affich_compt = canvas.create_text(4 * h, 7.75 * h, text=texte, font="Arial 16 italic", fill="white") Controler.create_matrice(L, board) # on met à jour la matrice avec les nouvelles coordonnées fin_du_jeu() # on vérifie que la voiture rouge ne puisse pas sortir du parking
def resoudre_matrice(): global f, compteur deb = process_time() # début chrono f = [] deplac = Controler.pieces_deplacables(board, L, None) # on calcule les pièces déplaçables à partir de la matrice actuelle Controler.init(file_matrice, deplac) # on initialse notre file_matrice avec tous les mouvements possibles save = [] for b in range(len(board)): save.append(str(board[b].posX) + str( board[b].posY)) # on fait une sauvegarde de toutes les positions de la matrice de base print("Veuillez patienter...") bouleen = False while bouleen != True: # tant qu'on a pas trouvé de combinaison gagnante, on continue de parcourir file_matrie f = file_matrice[0] # on récupère le premier élément de file_matrice Controler.modif(board, f) # on change les positions des différents véhicules selon la combinaison de mouvements f Controler.create_matrice(L, board) # on met à jour la matrice deplac = Controler.pieces_deplacables(board, L, f[ len(f) - 1] // 10) # on calcule les pièces déplaçables à partir de cette nouvelle configuration del file_matrice[0] # on supprime f (car on ne veut pas l'analyser à niveau) for p in range(len(deplac)): # pour chaque pièce déplaçable z = f[:] z.append(deplac[p]) # on crée ue nouvelle combinaison composée de f et de notre nouveau mouvement ajout = Controler.ajout_possible(z, file_matrice) # on regarde si cette configuration existe déjà dans file_matrice if ajout: # si ce n'est pas le cas, on l'ajoute file_matrice.append(z) bouleen = (Controler.bsup(board, L, val_rouge, board[val_rouge].orientation, board[val_rouge].posX, board[ val_rouge].posY) == 7) # on regarde si la nouvelle configuration valide la condition de victoire for c in range(len(board)): # on remet les véhicules à leur position initiale board[c].setPosition(int(save[c][0]), int(save[c][1])) Controler.create_matrice(L, board) # on met à jour la matrice # for i in range(len(L)): # print(L[i]) fin = process_time() # fin chrono # quand on sort du while et qu'on a trouvé une solution print("Exécution en ", fin - deb, " s") print("La solution est :", f) Controler.modif(board, f) # on met à jour les positions des véhicules Controler.create_matrice(L, board) # on met à jour la matrice for d in range(len(f)): s = "on déplace le véhicule " + str(f[d] // 10) + " en position " + str(f[d] % 10) print(s) for b in range(len(board)): # on met à jour les placements des vahicules sur le canvas canvas.coords(board[b].image, board[b].posX * h, board[b].posY * h) compteur = compteur+len(f) fin_du_jeu() # on lance l'animation de victoire while len(file_matrice) != 0: # on réinitialise file_matrice à [] del file_matrice[0] f = None