Beispiel #1
0
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))
Beispiel #2
0
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()
Beispiel #3
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 caisses:
        if coordonnee_case_suivante in caisses or coordonnee_case_suivante in murs:
            pass
        else:
            x_joueur: int = coordonnee_x(joueur[0])
            y_joueur: int = coordonnee_y(joueur[0])
            caisses.append(creer_caisse(deplace_caisse_x, deplace_caisse_y))
            creer_image(can, deplace_caisse_x, deplace_caisse_y,
                        liste_image[2])
            caisses.remove(ancienne_caisse)
            joueur.append(creer_personnage(deplace_joueur_x, deplace_joueur_y))
            creer_image(can, x_joueur, y_joueur, liste_image[6])
            # joueur.pop(0)
            joueur.remove(joueur[0])
    elif coordonnee_destination in murs:
        pass
    else:
        x_joueur: int = coordonnee_x(joueur[0])
        y_joueur: int = coordonnee_y(joueur[0])
        joueur.append(creer_personnage(deplace_joueur_x, deplace_joueur_y))
        creer_image(can, x_joueur, y_joueur, liste_image[6])
        joueur.pop(0)
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:
    '''
    # Vérification des paramètres
    if not os.path.isfile(path):
        return None
    elif joueur is None or caisses is None or cibles is None or murs is None:
        return None

    # Variables de départ
    c_dpt_x: int = DISTANCE_ENTRE_CASE // 2
    c_dpt_y: int = DISTANCE_ENTRE_CASE // 2

    # Déclaration de la coordonnée Y
    coord_y: int = Y_PREMIERE_CASE + c_dpt_y

    # Overture du fichier en mode lecture
    with open(path, 'r') as filin:
        # Lecture de chaque ligne du fichier
        for ligne in filin:
            # Calibrage des coordonnees X et Y
            coord_x = X_PREMIERE_CASE + c_dpt_x
            # Lecture et création de chaque élément de la ligne
            for element in ligne:
                if element == '#':
                    murs.append(creer_mur(coord_x, coord_y))
                elif element == '.':
                    cibles.append(creer_cible(coord_x, coord_y))
                elif element == '$':
                    caisses.append(creer_caisse(coord_x, coord_y))
                elif element == '@':
                    joueur.append(creer_personnage(coord_x, coord_y))

                # Calibrage de la coordonnée X à chaque intéraction
                coord_x = coord_x + DISTANCE_ENTRE_CASE
            # Calibrage de la coordonée Y a chaque intéraction
            coord_y = coord_y + DISTANCE_ENTRE_CASE
Beispiel #5
0
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:
    '''
    cpt_x: int = 0
    cpt_y: int = 0
    with open(path, "r") as filin:
        lignes: list = filin.readlines()

        for i in lignes:

            for j in i:

                if j == "#":
                    # faire deux boucles imbriqués, 20, 20 est la position initiale un for pour x et un for pour y
                    # 32 étant l'espace entre deu éléments.  20 + 0 * 32 /// 20 étant l'espace entre le fichier texte et le premier bloc
                    # du coup 20 et 32 reste il n'y a juste le 0 qui va varier

                    murs.append(creer_mur(X_PREMIERE_CASE + (DISTANCE_ENTRE_CASE * cpt_x),
                                          Y_PREMIERE_CASE + (DISTANCE_ENTRE_CASE * cpt_y)))

                elif j == ".":
                    cibles.append(creer_cible(X_PREMIERE_CASE + (DISTANCE_ENTRE_CASE * cpt_x),
                                              Y_PREMIERE_CASE + (DISTANCE_ENTRE_CASE * cpt_y)))
                elif j == "$":
                    caisses.append(creer_caisse(X_PREMIERE_CASE + (DISTANCE_ENTRE_CASE * cpt_x),
                                                Y_PREMIERE_CASE + (DISTANCE_ENTRE_CASE * cpt_y)))
                elif j == "@":
                    joueur.append(creer_personnage(X_PREMIERE_CASE + (DISTANCE_ENTRE_CASE * cpt_x),
                                                   Y_PREMIERE_CASE + (DISTANCE_ENTRE_CASE * cpt_y)))
                cpt_x += 1
            cpt_y += 1
            cpt_x = 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:
    '''
    # 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)