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 charger_niveau(joueur, caisses, cibles, murs, path): ''' Fonction permettant de charger depuis un fichier.txt et de remplir les différentes listes permettant le fonctionnement du jeu (joueur, caisses, murs, cibles) :param joueur: liste des personnages :param caisses: liste des caisses :param cibles: liste des cibles :param murs: liste des murs :param path: Chemin du fichier.txt :return: ''' listeEndroitsVides: list = [] fichier = open(path, 'r') lignes: list = fichier.readlines() cptLigne: int = 0 for ligne in lignes: y: int = int(Y_PREMIERE_CASE + DISTANCE_ENTRE_CASE / 2 + cptLigne * 32) cptColonnes: int = 0 for caractere in ligne: x: int = int(X_PREMIERE_CASE + DISTANCE_ENTRE_CASE / 2 + cptColonnes * 32) if caractere == '#': murs.append(creer_mur(x, y)) elif caractere == '@': joueur.append(creer_personnage(x, y)) elif caractere == '.': cibles.append(creer_cible(x, y)) elif caractere == '$': caisses.append(creer_caisse(x, y)) elif caractere == '-': listeEndroitsVides.append(creer_case_vide(x, y)) cptColonnes += 1 cptLigne += 1 fichier.close()
def charger_niveau(joueur: list, caisses: list, cibles: list, murs: list, path: str): """ Fonction permettant de charger depuis un fichier.txt et de remplir les différentes listes permettant le fonctionnement du jeu (joueur, caisses, murs, cibles) :param joueur: liste des personnages :param caisses: liste des caisses :param cibles: liste des cibles :param murs: liste des murs :param path: chemin du fichier.txt :return: """ # Lecture des lignes du fichier et stockage dans une matrice 2D x:y telle que 9:6 mx = [] cases_vides = [] x = y = 0 with open(path, 'r') as file_level: mx = file_level.readlines() mx = [row.rstrip('\n') for row in mx] # Recherche les differents éléments dans la matrice et crée l'image correspondante sur le board selon les fonctions outils données for i in range(len(mx)): x = int(X_PREMIERE_CASE + DISTANCE_ENTRE_CASE / 2 + i * 32) for j in range(len(mx[i])): y = int(Y_PREMIERE_CASE + DISTANCE_ENTRE_CASE / 2 + j *32) if mx[i][j] == '#': # Mur murs.append(creer_mur(x,y)) elif mx[i][j] == '-': # Case_vide cases_vides.append(creer_case_vide(x,y)) elif mx[i][j] == '.': # Cible cibles.append(creer_cible(x,y)) elif mx[i][j] == '$': # Caisse caisses.append(creer_caisse(x,y)) elif mx[i][j] == '@': # Personnage joueur.append(creer_personnage(x,y))
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 definir_mouvement(direction: str, can, joueur: list, murs: list, minotaures: list, sorties: list, carte: list, liste_image: list): """ Fonction permettant de définir la case de destination 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 minotaures: Liste des minotaures :param sorties: Liste des sorties :param carte: La liste de liste formant la grille du jeu :param liste_image: Liste contenant les références sur les images :return: """ # Déclaration des ancienne coordonées du joueur. old_x: int = joueur[0].x old_y: int = joueur[0].y # Déclaration des nouvelles coordonées du joueur. new_x: int = 0 new_y: int = 0 # Test des directions + ajout des nouvelles coordonés if direction == "gauche": new_x = old_x - 1 new_y = old_y if direction == "droite": new_x = old_x + 1 new_y = old_y if direction == "haut": new_y = old_y - 1 new_x = old_x if direction == "bas": new_y = old_y + 1 new_x = old_x # création de la variable destination (nécessaire pour effectuer_mouvement) coordonnee_destination = creer_case_vide(new_x, new_y) effectuer_mouvement(coordonnee_destination, minotaures, murs, joueur, sorties, carte, can, liste_image, new_x, new_y) # Remplacer l'ancienne image par une case vide (6 = image du sol) creer_image(can, old_x, old_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 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)