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)
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])
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)
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: ''' # 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)
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)