Example #1
0
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
Example #2
0
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