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