ProjetLaby (4)

On veut se déplacer dans notre labyrinthe !

cm 2020-01-29 NSI TP4

Le sujet du TP :

Les fichiers du TP en cliquant sur « lire la suite » …


Le fichier « pikachu.png » :

pikachu

Le fichier « tp4_gestion_du_fichier.py »

def ecriture(grille, nom_f, hauteur, largeur):
    with open(nom_f, "w") as fichier:
        for ligne in range(hauteur):  # parcours de la carte
            for colonne in range(largeur):  # parcours de la carte
                fichier.write(str(grille[ligne][colonne]))
            fichier.write("\n")
        fichier.close()

def lecture(nom_f):
    structure_niveau = []
    with open(nom_f, "r") as fichier:
        for ligne in fichier:
            ligne_niveau = []
            # On parcourt les sprites (lettres) contenus dans le fichier
            for sprite in ligne:
                # On ignore les "\n" de fin de ligne
                if sprite != "\n":
                    # On ajoute le sprite a la liste de la ligne
                    ligne_niveau.append(int(sprite))
            # On ajoute la ligne a la liste du niveau si elle n'est pas vide
            if len(ligne_niveau) > 0:
                structure_niveau.append(ligne_niveau)
    hauteur = len(structure_niveau)
    largeur = 0
    if hauteur > 0:
        largeur = len(structure_niveau[0])
    return structure_niveau, hauteur, largeur

Le fichier « carte.txt »

1111111111111
1000100000101
1011111011101
1000000000001
1110101110111
1000101010101
1011101010101
1000000010001
1111111111111

Le fichier « tp4_depart.py »

import pygame
from pygame.locals import *
from random import randint
from tp4_gestion_du_fichier import lecture, ecriture

def affichage(f, g, haut, larg, t):
    f.fill((0, 0, 0))
    for l in range(haut):
        for c in range(larg):
            if g[l][c] == 1:
                pygame.draw.rect(f, (0, 128, 128), (t * c, t * l, t, t), 0)
            elif g[l][c] == 2:
                pygame.draw.rect(f, (255, 0, 255), (t * c, t * l, t, t), 0)
    # pygame.display.flip()

def vers_le_bas(grille, x, y, hauteur, largeur):
    if y + 1 < hauteur and grille[y + 1][x] != 1:
        y += 1
    return x, y

def jeu(joueur, taille, nom_f):
    grille, hauteur, largeur = lecture(nom_f)
    pygame.init()
    fenetre = pygame.display.set_mode((largeur * taille, hauteur * taille))
    pygame.display.set_caption("ProjetLaby - TP 4")
    perso = pygame.image.load("pikachu.png").convert_alpha()
    perso = pygame.transform.scale(perso, (taille, taille))
    x, y = 1, 1
    depart = -1
    continuer = True

    while continuer:
        affichage(fenetre, grille, hauteur, largeur, taille)
        fenetre.blit(perso, (x * taille, y * taille))
        pygame.display.flip()

        # Gestion des evenements
        for event in pygame.event.get():
            if event.type == QUIT:
                continuer = False
            elif event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    continuer = 0
                elif event.key == K_d:
                    if depart > 0:
                        grille[0][depart] = 1
                    depart = randint(0, largeur // 2 - 1) * 2 + 1
                    grille[0][depart] = 2
                    x, y = depart, 0
                elif event.key == K_DOWN:
                    x, y = vers_le_bas(grille, x, y, hauteur, largeur)
    pygame.quit()

jeu("Pikachu", 60, "carte.txt")

11 réflexions au sujet de « ProjetLaby (4) »

  1. Bonsoir,

    Que signifie « IndexError: list index out of range », j’ai cette erreur sans arrêt et je ne sais pas où elle se trouve…

    Merci beaucoup !

    • Bonsoir,

      C’est que ta fonction essaye de prendre une valeur qui est en dehors de ton tableau de chiffre (carte.txt), donc inexistante.
      Si c’est une boucle, il faut diminuer sa répétition.

      J’espère t’avoir aidé(e) !

  2. Bonsoir/Bonjour,
    Lorsque j’appuie sur F5 pour démarrer le jeu un message apparait « Invalid syntax » et me met le 0 de « if y + 1 0: » en rouge je voudrais savoir comment régler ce problème.

    Bonne journée/Bonne soirée

  3. Bonjour
    En suivant les conseils du prof pour faire l’animation du personnage j’ai pris un feuille de sprites que je couper au bon endroit pour afficher le bon enchaînement de sprites en fonction du déplacement du personnage le problème c’est que je n’ais aucune idée de comment faire cela je pense qu’il faut une fonction spécial mais je ne sais pas laquelle j’ai cherché sur internet mais je n’ais pas vraiment compris les trucs que j’ai trouvés et sa ne marchait pas donc j’aurais besoin d’un peu d’aide….

    Merci d’avance 🙂

N'hésitez-pas à poser une question, ou faire avancer le schmilblick

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.