Deuxième synthèse de nos efforts

Et c’est top ! Bravo !

cm 2020-03-11 tpLaby 2eme synthese

Le code assemblé aujourd’hui est téléchargeable ici.

Pour mercredi prochain :

  • coder : faire que notre programme principal (le menu) ouvre un fichier scores.csv comme celui-ci
    Maxime;941
    Marchant;42
    Megane;942

    au démarrage pour remplir notre tableau de scores et l’enregistre au final en quittant le jeu.

  • se constituer un binome ou un trinome et avoir une première idée de projet 😉

Première synthèse de nos efforts

De vos envois par mails, j’ai compilé une petite version, mis en forme quelques détails.

Sont implémentés :

  • La nouvelle manière de se déplacer (Nico A., Victor & cie)
  • Le menu (Maxime & cie) (Cyril ?)
  • Les scores en partie (Sarkis, Minh-Dang avec de l’aide 😉 )
  • La saisie du pseudo ( Mégane & Elena avec de l’aide 😉 )
  • La flashlight (Alanis & Alice)

Et, last but not least :

  • Le labyrinthe creusé aléatoirement (Axel & cie)

Manquent encore cruellement :

  • l’animation de départ (Greg ? Louis ?),
  • le score du jeu, pour l’instant petitement fixé à 47, (Nico, Simon ? )
  • l’import d’un scores.csv au démarrage et l’enregistrement du tableau des scores en quittant,
  • l’animation du personnage, (Nico, Victor ?)
  • la « trace » du personnage, (Nathan, Matteo ?)
  • le « bot » contre qui on jouer (Angus ? Bastien ?),
  • la gestion du gamepad

De beaux challenges pour la semaine !

C’est téléchargeable ici.

Travail sur les missions particulières

Il faut impérativement s’investir pendant les congés suite à cette séquence, étape par étape, progresser !

Une note d’investissement dans ce projet sera posée avant la fin du trimestre !

cm 2020-02-05 NSI ProjetLaby missions particulièresOn commence par

 

Votre mission, si vous l’acceptez…

On corrige les minima attendus pour aujourd’hui après le TP4 de notre « ProjetLaby » :

  • A l’image de la touche « d » qui pose une case magenta codée « 2 » en grille[0][depart], faites en sorte que la touche « a » pose une case cyan codée « 3 » en dernière ligne dans une colonne arrivee impaire.
  • Créer les fonctions vers_le_haut(), vers_la_gauche() et vers_la_droite() et associez-les aux touches correspondantes.
  • Faites en sorte que la partie se termine quand le personnage est dans la case arrivee.

Vers un projet global cohérent en vue de la « journée portes ouvertes » le 14 mars

Explication de ce qu’on veut présenter et établissement d’une …

Liste des missions particulières :

cm 2020-02-05 NSI ProjetLaby missions particulières

Projet Laby (3)

Ce TP a été noté (comme annoncé). Ce n’est pas toujours brillant. Cette note est une variable qui sera ajustée lundi à venir, séance de TPs.

On peut décrire un Labyrinthe à l’aide de 1 et de 0. On suppose que le labyrinthe est « creusé » s’il y a 0.

Partie 1 : tableau à double entrée

À faire n°1 :

Dessiner le labyrinthe représenté par cette grille sur une feuille à carreaux.

# Notre grille initiale "tableau à double entrée"
grille=[[1,1,1,1,1,0,1],
[1,0,0,0,1,0,1],
[1,0,1,0,1,0,1],
[1,0,1,0,0,0,1],
[1,0,1,1,1,1,1]]

Quelle est sa largeur ? Sa hauteur ?

Partie 2 : gestion du tableau et de la souris

On considère le code suivant, dont certaines parties on été effacées :

import pygame
from pygame.locals import *
pygame.init()

largeur, hauteur = 7,5   # dimensions de la grille
taille = 60             # taille d'une case en pixels

fenetre=pygame.display.set_mode((largeur*taille, hauteur*taille))
pygame.display.set_caption("Un labyrinthe depuis un fichier texte ?")

# Notre grille initiale "tableau à double entrée"
grille=[[1,1,1,1,1,0,1],
        [1,0,0,0,1,0,1],
        [1,0,1,0,1,0,1],
        [1,0,1,0,0,0,1],
        [1,0,1,1,1,1,1]]

#fonction permettant l'affichage de la grille, envoyée en argument
def affichage(grille) :
    fenetre.fill((0, 0, 0))

    # ********************
    # partie à compléter *
    # ********************

    pygame.display.flip()

continuer = True

while continuer:

    affichage(grille)

    # Gestion des événements
    for event in pygame.event.get():
        if event.type == QUIT:
            continuer = False
        elif event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                print("touche Escape")
                continuer = 0
            else :
                print("autre touche")
        elif event.type == MOUSEBUTTONDOWN: # on a cliqué !
            # le pixel du clic
            (x, y) = event.pos
            print("clic en ("+str(x)+","+str(y)+")")
            # qui correspond à la case de grille en ligne l et en colonne c
            c = 42 # à modifier pour avoir le bon numéro de colonne
            l = 52 # à modifier pour avoir le bon numéro de ligne
            print("case : ("+str(c)+","+str(l)+")")
            # on passe de 0 à 1 ou de 1 à 0

            # ********************
            # partie à compléter *
            # ********************

            # affichage de la grille en console
            print(grille)

pygame.quit()

À faire n°2 :

Compléter le code pour que le clic de souris change la bonne valeur dans grille et donc l’affichage de mur à vide ou de vide à mur.

On a obtenu ceci :

import pygame
from pygame.locals import *
pygame.init()

largeur, hauteur = 7,5   # dimensions de la grille
taille = 60             # taille d'une case en pixels

fenetre=pygame.display.set_mode((largeur*taille, hauteur*taille))
pygame.display.set_caption("Un labyrinthe depuis un fichier texte ?")

# Notre grille initiale "tableau à double entrée"
grille=[[1,1,1,1,1,0,1],
        [1,0,0,0,1,0,1],
        [1,0,1,0,1,0,1],
        [1,0,1,0,0,0,1],
        [1,0,1,1,1,1,1]]

#fonction permettant l'affichage de la grille, envoyée en argument
def affichage(grille) :
    fenetre.fill((0, 0, 0))

    for ligne in range(hauteur):
        for colonne in range(largeur):
            if grille[ligne][colonne] == 1:
                pygame.draw.rect(fenetre, (255, 128, 0), (taille * colonne, taille * ligne, taille, taille), 0)
    pygame.display.flip()

continuer = True

while continuer:

    affichage(grille)

    # Gestion des événements
    for event in pygame.event.get():
        if event.type == QUIT:
            continuer = False
        elif event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                print("touche Escape")
                continuer = 0
            else :
                print("autre touche")
        elif event.type == MOUSEBUTTONDOWN: # on a cliqué !
            # le pixel du clic
            (x, y) = event.pos
            print("clic en ("+str(x)+","+str(y)+")")
            # qui correspond à la case de grille en ligne l et en colonne c
            c = x // taille # à modifier pour avoir le bon numéro de colonne
            l = y // taille # à modifier pour avoir le bon numéro de ligne
            print("case : ("+str(c)+","+str(l)+")")
            # on passe de 0 à 1 ou de 1 à 0

            grille[l][c] = 1 - grille[l][c]

            # On aurait pu faire ainsi :
            # if grille[l][c] == 1:
            #    grille[l][c] = 0
            # else :
            #    grille[l][c] = 1

            # affichage de la grille en console
            print(grille)

pygame.quit()

Partie 3 : avec un fichier « carte » – sera repris lundi

À faire n°3 :

Copier ce qui suit dans fichier texte, à enregistrer sous « carte.txt » :

111111111
100000001
111110101
101000101
101010111
100010001
111111111

À faire n°4 :

Écrire une fonction lecture() qui :

  • acceptera comme argument le nom du fichier texte supposé dans le même répertoire que le script,
  • renverra
    • la grille d’entiers (zéro ou un) comme dans le premier code,
    • la largeur et la hauteur de cette grille.

Lors de l’événement « appui sur la touche l » (comme lecture), le script

  • appelle la fonction lecture() et remplace donc la grille par celle lue,
  • rafraîchit la fenêtre en tenant compte de la nouvelle largeur et la nouvelle hauteur.

À faire n°5 :

Écrire une fonction ecriture() qui :

  • acceptera comme arguments
    • le nom du fichier texte à enregistrer dans le même répertoire que le script,
    • la grille à enregistrer, la « hauteur » et la « largeur » de la grille,
  • écrasera le fichier texte éventuellement existant par un fichier contenant des 0 et des 1 par lignes (comme l’exemple fourni) en lisant la grille d’entiers (zéro ou un).

Lors de l’événement « appui sur la touche e » (comme enregistrement), le script appelle la fonction ecriture().

Projet Laby (2)

Flash : les opérations % et // en python

Par exemple

>>> 3 * 2
6
>>> 3 ** 2
9
>>> 7 / 2
3.5
>>> 7 // 2
3
>>> 7 % 2
1
>>>

Éléments de correction du TP 1 :

import pygame
from pygame.locals import *
# importation des constantes de configuration
from configuration import *

pygame.init()
fenetre = pygame.display.set_mode(TAILLE_FENETRE)
pygame.display.set_caption("TP1 souris coordonnees et pygame")
fenetre.fill(COULEUR_FENETRE)
continuer = True

# initialisation de la liste
liste = []

# dernier clic factice
x_mouse, y_mouse = -20, -20 # en dehors de la fenêtre !

# couleur du fond, pour aller plus loin
r = 255
v = 128
b = 0

while continuer:

    # gestion des événements
    for event in pygame.event.get():
        if event.type == QUIT:
            continuer = False
        elif event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                print("Touche Escape")
                continuer = False
            elif event.key == K_RIGHT:
                print("Touche Droite")
                b += 32
                if b > 255 :
                    b -= 256
            elif event.key == K_DOWN:
                print("Touche Bas")
                v += 32
                if v > 255 :
                    v -= 256
            elif event.key == K_LEFT:
                print("Touche Gauche")
                r += 32
                if r > 255 :
                    r -= 256
            else :
                print("Autre touche")
        elif event.type == MOUSEMOTION :
            (x, y) = event.pos
            # rajouter dans la liste
            liste.append((x,y))

            #pygame.draw.rect(fenetre, COULEUR_TRAIT, (x-5, y-4, 10, 8), 0)
        elif event.type == MOUSEBUTTONUP :
            (x_mouse, y_mouse) = event.pos

    # dessinons !

    fenetre.fill((r, v, b)) # le fond

    # les rectangles verts
    for couple in liste[-100:] :
        pygame.draw.rect(fenetre, COULEUR_TRAIT, (couple[0]-5, couple[1]-4, 10, 8), 0)

    # le dernier clic
    pygame.draw.circle(fenetre, COULEUR_CERCLE, (x_mouse, y_mouse), 16, 0)

    pygame.display.flip()

pygame.quit()

TP n°2 : « souris et cases »

cm 2020-01-15 ProjetLaby TP2-sourisCases

  • On montre aux élèves au TBI le script en action (mais pas le code) qui présente une fenêtre :
    • lorsque l’on clique un carré devient de plus en plus blanc (nuance de gris)
    • puis noir quand on dépasse 255 (en fait de 50 en 50)
    • le shell affiche des éléments qui permettent d’introduire notre liste de listes « grille »
  • Une seule consigne : mettez vous en groupes de 2 ou 3 et réalisez ce script !
    On utilisera cette liste de listes

    # notre grille "tableau à double entrée"
    grille = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
  • Le script reste en action pendant tout le TP au TBI et les élèves peuvent aller cliquer au TBI
    • sans regarder le code, bien évidemment !
  • Les élèves peuvent se déplacer, s’aider, demander de l’aide 🙂