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