1 La grille 2 Tétris

Transcription

1 La grille 2 Tétris
1
La grille
Le jeu se passe sur une grille matérialisée par un tableau (liste de listes). On prend pour exemple une grille de 6 lignes de
largeur 4 :
G = [
[ 0 , 0 , 0 , 0] ,
[ 0 , 0 , 0 , 0] ,
[ 0 , 0 , 0 , 0] ,
[ 0 , 0 , 0 , 0] ,
[ 0 , 0 , 0 , 0] ,
[ 0 , 0 , 0 , 0] ,
[ 0 , 0 , 0 , 0] ,
]
G[3] est la 4ème ligne , G[3][2] est le 3ème élément de la 4ème ligne. (ordre inverse des coordonnées usuelles dans un repère)
Les valeurs du tableau au fur et à mesure du jeu.
En parallèle, on créé une fenêtre graphique tkinter où chaque cellule du tableau est représentée par un carré.
2
Tétris
2.1
Pièces du jeu
Sont placées sur la grille les pièces fixes, il n’est pas utile d’y mettre la pièce mobile.
La pièce mobile peut se symboliser par 4 positions libres de la grille, par exemple [ [1,2] , [1,3] , [2,3] , [2,4] ]
(forme explicite).
Faire descendre cette pièce est simple, la faire pivoter un peu moins.
2.2
2.2.1
Des commandes à définir
def libre(piece) :
. . .doit renvoyer True si et seulement si la pièce ne sort pas de la grille et les emplacements de la pièce sont libres sur la grille.
2.2.2
def pivoteD(piece) :
. . .doit renvoyer une nouvelle pièce obtenue par rotation de la pièce
Un peu de mathématiques :
Exprimer les numéros de lignes et colonnes des points
obtenus par quart de tour de [L, C] autour de [L0 , C0 ]
[L, C]
b
L′ = . . .
[L′′ , C ′′ ]
C′ = . . .
b
L′′ = . . .
b
[L0 , C0 ]
b
C ′′ = . . .
[L′ , C ′ ]
Info listes : Si A est un tableau, B=A ne créé pas une copie d’un tableau mais seulement donne un nouveau nom au tableau
A (alias).
Pour créer une copie de A indépendante de A en mémoire il faut créer un tableau de zéros et y recopier les éléments de A
élément par élément.
1
2.2.3
def actualise_grille() :
. . .doit effacer les pièces du canvas et les récréer à partir de la grille
3
infos tkinter
3.1
tags
Pour référencer un ensemble d’objets du canvas il est pratique de les taguer.
zone_dessin.create_rectangle(2,2,100,100,tags=("piece","mobile")
On peut alors
• détruire tous les pièces : zone_dessin.delete("piece")
• fixer les pièces mobiles : zone_dessin.dtags("piece","mobile")
• déplacer les pièces mobiles : zone_dessin.move("courante",0,+dx)
3.2
Evènements liés au clavier
fenetre.bind("<Left>", gauche)
fenetre.bind("<Right>", droite)
fenetre.bind("<Up>", haut)
fenetre.bind("<Down>", bas)
fenetre.bind("<space>", espace)
fenetre.bind("<Return>", entree)
Il faut écrire les commandes def gauche(event) : etc. . .
3.3
Idées d’organisation
Sur la fenêtre placer le dessin de la grille et 3 boutons : Démarrer, Arrêt , Quitter . (Voit Swinnen Python 3 p 99)
2