Tetris

Tetris est un jeu vidéo de puzzle conçu par Alekseï Pajitnov à partir de juin 1984.

 

Tetris met le joueur au défi de réaliser des lignes complètes en déplaçant des pièces de formes différentes, les tétrominos, qui défilent depuis le haut jusqu’au bas de l’écran. Les lignes complétées disparaissent tout en rapportant des points et le joueur peut de nouveau remplir les cases libérées.

Le jeu n’a pas de fin : le joueur perd la partie lorsqu’un tétromino reste bloqué en haut. Il doit donc résister le plus longtemps à la chute continue des tétrominos, afin de réaliser le meilleur score.

 

 

 

 

 

 

 

Source : https://fr.wikipedia.org/wiki/Tetris

ensemble des tétrominos du jeu Tetris

Travail demandé

Imaginer, sous forme d’un diagramme de classe, une structure simple présentant les classes nécessaires à la programmation de ce jeu, leurs attributs, leurs méthodes et leurs relations.
Correction

Pour la gestion des événements clavier, on utilise la bibliothèque pynput.

La boucle principale est conditionnée par un attribut booléen game_over.

Pour la gestion du rythme de jeu on choisit d’utiliser la fonction time.sleep dans la boucle principale.

L’accélération du rythme est réalisée par une diminution périodique (période periode) du délai (attribut delai).

La structure des données est la suivante :

  • Tetromino :
    • schema : tuple de coordonnées relatives de cases
      exemple : ((0,-1), (0,0), (1,0), (1,1))
    • signe : entier correspondant à un code de caractère
  • Grille.grille : tableau à 2 dimensions de caractères (les cases des Tetromino) ou None pour les cases vides.

 

Réaliser l’implémentation complète du jeu en Python.
Procéder par petites étapes … en réalisant des tests fréquents …
Signatures
from pynput import keyboard 
import time
from random import randint


###########################################################################################
class Tetris:
    # Tous les schémas de tetrominos
    TETROS = [[(0,-1), (0,0), (0,1), (0,2)],
              [(0,-1), (0,0), (0,1), (1,0)],
              [(0,-1), (0,0), (1,0), (1,1)],
              [(0,1), (0,0), (1,-1), (1,0)],
              [(0,-2), (0,-1), (0,0), (1,0)],
              [(0,1), (0,0), (1,0), (1,1)]
             ]
    
    def __init__(self):
        ...

    def descendre_tetro(self):
        """ Descend le Tetromino d'une ligne vers le bas
            si ce n'est pas possible, le tetromino est posé
        """
        ...
    

    def gerer_temps(self):
        """ Mise à jourc des attributs liés au temps :
             chrono, delai
        """
        ...
        
    
    def decaler_tetro(self, sens):
        """ Décale lattéralement le Tetromino courant
            d'une distance égale à sens
            (si impossible, ne fait rien)
        """
        ...
    

    def ajouter_tetro(self):
        """ Instancie un nouveau Tetromino
            et le place en heut de la grille (si possible)
        """
        ...

    def poser_tetro(self):
        """ Pose le Tetromino lorsqu'il ne peut plus descendre
             et lancement de la vérification de lignes
        """
        ...

    def on_key_press(self, key):
        """ Méthode appelée quand une touche est pressée
        """
        ...

    def afficher(self):
        """ Affiche le jeu :
                score
                grille
        """
        print(f"Score : {self.score}")
        print(self.grille)


###########################################################################################
class Tetromino:
    def __init__(self, schema, signe):
        ...

    def __str__(self):
        return chr(self.signe)

    def tourner(self):
        ...
        

###########################################################################################
class Grille:
    w = 10
    h = 10

    def __init__(self):
        self.grille = ...


    def __repr__(self):
        ...


    def est_possible(self, tetro, pos):
        """ Renvoie True si le Tetromino tetro
            peut être placé à la position pos
        """
        ...
    

    def placer_tetro(self, tetro, pos):
        """ Place le Tétromino tetro
            à la position pos
        """
        ...


    def retirer_tetro(self, tetro, pos):
        """ Retire complètement le Tétromino tetro
            situé à la position pos
        """
        ...


    def verif_lignes(self, score = 0):
        """ Vérifie la présence de lignes complètes
            les supprime (avec décalage de l'ensemble vers le bas)
            et renvoie le nombre de lignes supprimées
            (fonction récursive)
        """
        ...



###########################################################################################
if __name__ == "__main__":
    T = Tetris()
    while not T.game_over:
        T.descendre_tetro()
        T.gerer_temps()
        time.sleep(T.delai)

 

 

 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *