Пример #1
0
def mouvement(direction: str, can, joueur: list, murs: list, caisses: list, liste_image: list):
    """
    Fonction permettant de définir les cases de destinations (il y en a 2 si le joueur pousse une caisse) selon la
    direction choisie.
    :param direction: Direction dans laquelle le joueur se déplace (droite, gauche, haut, bas)
    :param can: Canvas (ignorez son fonctionnement), utile uniquement pour créer_image()
    :param joueur: liste des joueurs
    :param murs: liste des murs

    :param caisses: liste des caisses
    :param liste_image: liste des images (murs, caisses etc...) détaillée dans l'énoncé
    :return:
    """

    if direction == 'droite':        
        xy_coord = creer_case_vide(coordonnee_x(joueur[0]) + 32, coordonnee_y(joueur[0]))
        xy_coord_suiv = creer_case_vide(coordonnee_x(joueur[0]) + 64, coordonnee_y(joueur[0]))

    elif direction == 'gauche':
        xy_coord = creer_case_vide(coordonnee_x(joueur[0] - 32), coordonnee_y(joueur[0]))
        xy_coord_suiv = creer_case_vide(coordonnee_x(joueur[0]) - 64, coordonnee_y(joueur[0]))

    elif direction == 'haut':
        xy_coord = creer_case_vide(coordonnee_x(joueur[0]), coordonnee_y(joueur[0]) - 32)
        xy_coord_suiv = creer_case_vide(coordonnee_x(joueur[0]), coordonnee_y(joueur[0])-64)

    else: # bas
        xy_coord = creer_case_vide(coordonnee_x(joueur[0]), coordonnee_y(joueur[0]) + 32)
        xy_coord_suiv = creer_case_vide(coordonnee_x(joueur[0]), coordonnee_y(joueur[0]) + 64)

    old_caisse = xy_coord # xy coord est un objet de type Case vide avec x,y correspondant

    effectuer_mouvement(xy_coord, xy_coord_suiv, old_caisse, caisses, murs, joueur, can, coordonnee_x(xy_coord_suiv), coordonnee_y(xy_coord_suiv), coordonnee_x(xy_coord), coordonnee_y(xy_coord), liste_image)
Пример #2
0
def effectuer_mouvement(coordonnee_destination, coordonnee_case_suivante, ancienne_caisse, caisses: list, murs: list, joueur: list, can, deplace_caisse_x: int, deplace_caisse_y: int, deplace_joueur_x: int, deplace_joueur_y: int, liste_image: list):
    """
    Fonction permettant d'effectuer le déplacement ou de ne pas l'effectuer si celui-ci n'est pas possible.
    Voir énoncé "Quelques règles".
    Cette methode est appelée par mouvement.
    :param coordonnee_destination: variable CaseVide ayant possiblement des coordonnées identiques à une autre variable
    (murs, caisse, casevide)
    :param coordonnee_case_suivante: variable CaseVide ayant possiblement des coordonnées identiques à une autre variable
    (murs, caisse, casevide) mais représente la case après coordonnee_destination
    :param ancienne_caisse: variable utile pour supprimer l'ancienne caisse (après avoir déplacé celle-ci)
    :param caisses: liste des caisses
    :param murs: liste des murs
    :param joueur: liste des joueurs
    :param can: Canvas (ignorez son fonctionnement), utile uniquement pour créer_image()
    :param deplace_caisse_x: coordonnée à laquelle la caisse va être déplacée en x (si le joueur pousse une caisse)
    :param deplace_caisse_y: coordonnée à laquelle la caisse va être déplacée en y (si le joueur pousse une caisse)
    :param deplace_joueur_x: coordonnée en x à laquelle le joueur va être après le mouvement
    :param deplace_joueur_y: coordonnée en y à laquelle le joueur va être après le mouvement
    :param liste_image: liste des images (murs, caisses etc...) détaillée dans l'énoncé
    :return:
    """
    if coordonnee_destination in caisses:
        if coordonnee_case_suivante in caisses or coordonnee_case_suivante in murs:
            pass
        else:
            player_x: int = coordonnee_x(joueur[0])
            player_y: int = coordonnee_y(joueur[0])
            joueur.append(creer_personnage(deplace_joueur_x, deplace_joueur_y))
            creer_image(can, player_x, player_y, liste_image[6])
Пример #3
0
def mouvement(direction, can, joueur, murs, caisses, liste_image):
    '''
    Fonction permettant de définir les cases de destinations (il y en a 2 si le joueur pousse une caisse) selon la
    direction choisie.
    :param direction: Direction dans laquelle le joueur se déplace (droite, gauche, haut, bas)
    :param can: Canvas (ignorez son fonctionnement), utile uniquement pour créer_image()
    :param joueur: liste des joueurs
    :param murs: liste des murs
    :param caisses: liste des caisses
    :param liste_image: liste des images (murs, caisses etc...) détaillée dans l'énoncé
    :return:
    '''
    
    # il n'y a qu'une seule liste à la fois qui bouge, soit x, soit y, a gauche et droite c'est y et haut bas = x
    # Lorsqu'on fait un mouvement, on crée une case vide aux coordonnées de la destination
    if direction == "gauche":
        coordonnee_destination = creer_case_vide(coordonnee_x(joueur[0]) - DISTANCE_ENTRE_CASE, coordonnee_y(joueur[0]))
        coordonnee_case_suivante = creer_case_vide(coordonnee_x(joueur[0]) - (DISTANCE_ENTRE_CASE * 2),
                                                   coordonnee_y(joueur[0]))

    if direction == "droite":
        coordonnee_destination = creer_case_vide(coordonnee_x(joueur[0]) + DISTANCE_ENTRE_CASE, coordonnee_y(joueur[0]))
        coordonnee_case_suivante = creer_case_vide(coordonnee_x(joueur[0]) + (DISTANCE_ENTRE_CASE * 2),
                                                   coordonnee_y(joueur[0]))

    if direction == "haut":
        coordonnee_destination = creer_case_vide(coordonnee_x(joueur[0]), coordonnee_y(joueur[0]) - DISTANCE_ENTRE_CASE)
        coordonnee_case_suivante = creer_case_vide(coordonnee_x(joueur[0]),
                                                   coordonnee_y(joueur[0]) - (DISTANCE_ENTRE_CASE * 2))

    if direction == "bas":
        coordonnee_destination = creer_case_vide(coordonnee_x(joueur[0]), coordonnee_y(joueur[0]) + DISTANCE_ENTRE_CASE)
        coordonnee_case_suivante = creer_case_vide(coordonnee_x(joueur[0]),
                                                   coordonnee_y(joueur[0]) + (DISTANCE_ENTRE_CASE * 2))
    
    # on crée la variable ancienne_caisse que l'on va utiliser dans la fonction effectuer_mouvement
    # cela va permettre de conserver les coordonées afin de pouvoir supprimer l'ancienne caisse
    ancienne_caisse = coordonnee_destination
    # on crée les variables deplace pour les utilisé dans la fonction effectuer_mouvement
    deplace_joueur_x = coordonnee_x(coordonnee_destination)
    deplace_joueur_y = coordonnee_y(coordonnee_destination)
    deplace_caisse_x = coordonnee_x(coordonnee_case_suivante)
    deplace_caisse_y = coordonnee_y(coordonnee_case_suivante)
    
    # on appele la fonction effectuer_mouvement ici car elle est appelée par mouvement ( selon la direction ) 
    effectuer_mouvement(coordonnee_destination, coordonnee_case_suivante, ancienne_caisse, caisses, murs, joueur, can,
                        deplace_caisse_x, deplace_caisse_y, deplace_joueur_x, deplace_joueur_y, liste_image)
Пример #4
0
def mouvement(direction, can, joueur, murs, caisses, liste_image):
    '''
    Fonction permettant de définir les cases de destinations (il y en a 2 si le joueur pousse une caisse) selon la
    direction choisie.
    :param direction: Direction dans laquelle le joueur se déplace (droite, gauche, haut, bas)
    :param can: Canvas (ignorez son fonctionnement), utile uniquement pour créer_image()
    :param joueur: liste des joueurs
    :param murs: liste des murs
    :param caisses: liste des caisses
    :param liste_image: liste des images (murs, caisses etc...) détaillée dans l'énoncé
    :return:
    '''
    coordonnee_dest = None
    if direction == 'droite':
        coordonnee_dest = creer_case_vide(
            coordonnee_x(joueur[0]) + 32, coordonnee_y(joueur[0]))
        coordonnee_dest2 = creer_case_vide(
            coordonnee_x(joueur[0]) + 64, coordonnee_y(joueur[0]))
    elif direction == 'gauche':
        coordonnee_dest = creer_case_vide(
            coordonnee_x(joueur[0]) - 32, coordonnee_y(joueur[0]))
        coordonnee_dest2 = creer_case_vide(
            coordonnee_x(joueur[0]) - 64, coordonnee_y(joueur[0]))
    elif direction == 'haut':
        coordonnee_dest = creer_case_vide(coordonnee_x(joueur[0]),
                                          coordonnee_y(joueur[0]) - 32)
        coordonnee_dest2 = creer_case_vide(coordonnee_x(joueur[0]),
                                           coordonnee_y(joueur[0]) - 64)
    else:
        coordonnee_dest = creer_case_vide(coordonnee_x(joueur[0]),
                                          coordonnee_y(joueur[0]) + 32)
        coordonnee_dest2 = creer_case_vide(coordonnee_x(joueur[0]),
                                           coordonnee_y(joueur[0]) + 64)

    ancienne_caisse = coordonnee_dest
    effectuer_mouvement(coordonnee_dest, coordonnee_dest2, ancienne_caisse,
                        caisses, murs, joueur, can,
                        coordonnee_x(coordonnee_dest2),
                        coordonnee_y(coordonnee_dest2),
                        coordonnee_x(coordonnee_dest),
                        coordonnee_y(coordonnee_dest), liste_image)
Пример #5
0
def effectuer_mouvement(coordonnee_destination, coordonnee_case_suivante, ancienne_caisse, caisses, murs, joueur, can,
                        deplace_caisse_x, deplace_caisse_y, deplace_joueur_x, deplace_joueur_y, liste_image):
    '''
    Fonction permettant d'effectuer le déplacement ou de ne pas l'effectuer si celui-ci n'est pas possible. Voir énoncé
    "Quelques règles". Cette methode est appelée par mouvement.
    :param coordonnee_destination: variable CaseVide ayant possiblement des coordonnées identiques à une autre variable
    (murs, caisse, casevide)
    :param coordonnee_case_suivante: variable CaseVide ayant possiblement des coordonnées identiques à une autre variable
    (murs, caisse, casevide) mais représente la case après coordonnee_destination
    :param ancienne_caisse: variable utile pour supprimer l'ancienne caisse (après avoir déplacé celle-ci)
    :param caisses: liste des caisses
    :param murs: liste des murs
    :param joueur: liste des joueurs
    :param can: Canvas (ignorez son fonctionnement), utile uniquement pour créer_image()
    :param deplace_caisse_x: coordonnée à laquelle la caisse va être déplacée en x (si le joueur pousse une caisse)
    :param deplace_caisse_y: coordonnée à laquelle la caisse va être déplacée en y (si le joueur pousse une caisse)
    :param deplace_joueur_x: coordonnée en x à laquelle le joueur va être après le mouvement
    :param deplace_joueur_y: coordonnée en y à laquelle le joueur va être après le mouvement
    :param liste_image: liste des images (murs, caisses etc...) détaillée dans l'énoncé
    :return:
    '''

    if coordonnee_destination in murs:  # si un mur alors je bouge pas
        pass

    elif coordonnee_destination in caisses:
        if coordonnee_case_suivante in caisses or coordonnee_case_suivante in murs:  # si double caisse alors je bouge pas
            pass
        else:
            for c in caisses:
                if est_egal_a(c, ancienne_caisse):
                    caisses.remove(c)
                    joueur.append(creer_personnage(deplace_joueur_x, deplace_joueur_y))
                    ancien_joueur = joueur.pop(0)
                    creer_image(can, coordonnee_x(ancien_joueur), coordonnee_y(ancien_joueur), liste_image[6])
                    caisses.append(creer_caisse(deplace_caisse_x, deplace_caisse_y))

    else:
        joueur.append(creer_personnage(deplace_joueur_x, deplace_joueur_y))
        ancien_joueur = joueur.pop(0)
        creer_image(can, coordonnee_x(ancien_joueur), coordonnee_y(ancien_joueur), liste_image[6])
def mouvement(direction, can, joueur, murs, caisses, liste_image):
    '''
    Fonction permettant de définir les cases de destinations (il y en a 2 si le joueur pousse une caisse) selon la
    direction choisie.
    :param direction: Direction dans laquelle le joueur se déplace (droite, gauche, haut, bas)
    :param can: Canvas (ignorez son fonctionnement), utile uniquement pour créer_image()
    :param joueur: liste des joueurs
    :param murs: liste des murs
    :param caisses: liste des caisses
    :param liste_image: liste des images (murs, caisses etc...) détaillée dans l'énoncé
    :return:
    '''
    # Vérification des paramètres
    if direction is None or joueur is None or murs is None or caisses is None or liste_image is None:
        return None

    # Position du joueur
    position_x_joueur: int = coordonnee_x(joueur[0])
    position_y_joueur: int = coordonnee_y(joueur[0])

    if direction == "droite":  # Si l'utilisateur clic à droite
        effectuer_mouvement(
            creer_case_vide(position_x_joueur + DISTANCE_ENTRE_CASE,
                            position_y_joueur),
            creer_case_vide(position_x_joueur + 2 * DISTANCE_ENTRE_CASE,
                            position_y_joueur),
            creer_caisse(position_x_joueur + DISTANCE_ENTRE_CASE,
                         position_y_joueur), caisses, murs, joueur, can,
            (position_x_joueur + 2 * DISTANCE_ENTRE_CASE), position_y_joueur,
            (position_x_joueur + DISTANCE_ENTRE_CASE), position_y_joueur,
            liste_image)
    elif direction == "gauche":  # Si l'utilisateur clic à gauche
        effectuer_mouvement(
            creer_case_vide(position_x_joueur - DISTANCE_ENTRE_CASE,
                            position_y_joueur),
            creer_case_vide(position_x_joueur - 2 * DISTANCE_ENTRE_CASE,
                            position_y_joueur),
            creer_caisse(position_x_joueur - DISTANCE_ENTRE_CASE,
                         position_y_joueur), caisses, murs, joueur, can,
            (position_x_joueur - 2 * DISTANCE_ENTRE_CASE), position_y_joueur,
            (position_x_joueur - DISTANCE_ENTRE_CASE), position_y_joueur,
            liste_image)
    elif direction == "haut":  # Si l'utilisateur clic en haut
        effectuer_mouvement(
            creer_case_vide(position_x_joueur,
                            position_y_joueur - DISTANCE_ENTRE_CASE),
            creer_case_vide(position_x_joueur,
                            position_y_joueur - 2 * DISTANCE_ENTRE_CASE),
            creer_caisse(position_x_joueur,
                         position_y_joueur - DISTANCE_ENTRE_CASE), caisses,
            murs, joueur, can, position_x_joueur,
            (position_y_joueur - 2 * DISTANCE_ENTRE_CASE), position_x_joueur,
            (position_y_joueur - DISTANCE_ENTRE_CASE), liste_image)
    elif direction == "bas":  # Si l'utilisateur clic en bas
        effectuer_mouvement(
            creer_case_vide(position_x_joueur,
                            position_y_joueur + DISTANCE_ENTRE_CASE),
            creer_case_vide(position_x_joueur,
                            position_y_joueur + 2 * DISTANCE_ENTRE_CASE),
            creer_caisse(position_x_joueur,
                         position_y_joueur + DISTANCE_ENTRE_CASE), caisses,
            murs, joueur, can, position_x_joueur,
            (position_y_joueur + 2 * DISTANCE_ENTRE_CASE), position_x_joueur,
            (position_y_joueur + DISTANCE_ENTRE_CASE), liste_image)
def effectuer_mouvement(coordonnee_destination, coordonnee_case_suivante,
                        ancienne_caisse, caisses, murs, joueur, can,
                        deplace_caisse_x, deplace_caisse_y, deplace_joueur_x,
                        deplace_joueur_y, liste_image):
    '''
    Fonction permettant d'effectuer le déplacement ou de ne pas l'effectuer si celui-ci n'est pas possible. Voir énoncé
    "Quelques règles". Cette methode est appelée par mouvement.
    :param coordonnee_destination: variable CaseVide ayant possiblement des coordonnées identiques à une autre variable
    (murs, caisse, casevide)
    :param coordonnee_case_suivante: variable CaseVide ayant possiblement des coordonnées identiques à une autre variable
    (murs, caisse, casevide) mais représente la case après coordonnee_destination
    :param ancienne_caisse: variable utile pour supprimer l'ancienne caisse (après avoir déplacé celle-ci)
    :param caisses: liste des caisses
    :param murs: liste des murs
    :param joueur: liste des joueurs
    :param can: Canvas (ignorez son fonctionnement), utile uniquement pour créer_image()
    :param deplace_caisse_x: coordonnée à laquelle la caisse va être déplacée en x (si le joueur pousse une caisse)
    :param deplace_caisse_y: coordonnée à laquelle la caisse va être déplacée en y (si le joueur pousse une caisse)
    :param deplace_joueur_x: coordonnée en x à laquelle le joueur va être après le mouvement
    :param deplace_joueur_y: coordonnée en y à laquelle le joueur va être après le mouvement
    :param liste_image: liste des images (murs, caisses etc...) détaillée dans l'énoncé
    :return:
    '''
    # Vérification des paramètres
    if caisses is None or murs is None or joueur is None or deplace_caisse_x is None or deplace_caisse_y is None \
        or deplace_joueur_x is None or deplace_joueur_y is None or liste_image is None:
        return None

    # Booléens pour connaître la "nature" de la case destination ou la case qui suit la case destination
    case_dest_mur: bool = False
    case_suiv_mur: bool = False
    case_dest_caisse: bool = False
    case_suiv_caisse: bool = False

    for elt in murs:
        if est_egal_a(elt, coordonnee_destination):
            case_dest_mur = True
            break
    for elt in murs:
        if est_egal_a(elt, coordonnee_case_suivante):
            case_suiv_mur = True
            break
    for elt in caisses:
        if est_egal_a(elt, coordonnee_destination):
            case_dest_caisse = True
            break
    for elt in caisses:
        if est_egal_a(elt, coordonnee_case_suivante):
            case_suiv_caisse = True
            break

    # Selon les résultats obtenus plus haut, autorise le déplacement et fait les changements nécessaires sur les cases "touchées"
    if not case_dest_mur:
        if not (case_dest_caisse and (case_suiv_caisse or case_suiv_mur)):
            if case_dest_caisse:
                creer_image(can, deplace_caisse_x, deplace_caisse_y,
                            liste_image[2])
                caisses.remove(ancienne_caisse)
                caisses.append(creer_caisse(deplace_caisse_x,
                                            deplace_caisse_y))

                creer_image(can, coordonnee_x(joueur[0]),
                            coordonnee_y(joueur[0]), liste_image[6])
                joueur[0] = creer_personnage(deplace_joueur_x,
                                             deplace_joueur_y)
            else:
                creer_image(can, coordonnee_x(joueur[0]),
                            coordonnee_y(joueur[0]), liste_image[6])
                joueur[0] = creer_personnage(deplace_joueur_x,
                                             deplace_joueur_y)