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
def clic(evt): global val, image, compteur old[0], old[1] = evt.x, evt.y mat_posX = old[0] // h mat_posY = old[1] // h if L[mat_posY][mat_posX] != 0: compteur += 1 essai = L[mat_posY][mat_posX] val = Controler.trouver_tuple(board, essai) image = board[val].image position_v[0], position_v[1] = canvas.coords(image) bornes[0] = Controler.binf(board, L, val, board[val].orientation, mat_posX, mat_posY) bornes[1] = Controler.bsup(board, L, val, board[val].orientation, mat_posX, mat_posY)
def fin_du_jeu(): # on regarde si le joueur a libéré la voir devant la voiture rouge global compteur borne_vr = Controler.bsup(board, L, val_rouge, board[val_rouge].orientation, board[val_rouge].posX, board[val_rouge].posY) if borne_vr == 7: # on supprime les événements car le joueur a terminé le jeu canvas.unbind('<B1-Motion>') canvas.unbind('<Button-1>') canvas.unbind('<Motion>') canvas.unbind('<ButtonRelease>') compteur += 1 canvas.delete(board[val_rouge].image) position_v[0], position_v[1] = board[val_rouge].posX * h, board[val_rouge].posY * h mouvement()