Tetris Projet

Ci dessous, vous pourrez ainsi trouver le code que l’on a injecter dans la carte micro bit pour exécuter le tétris :

#Projet NSI
from microbit import *
from random import choice

#Prise en compte des collones existante
grid=[[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,1,1,1,1,1,1]]
#Liste des bricks différentes
bricks = [[9,9],[9,0]],[[9,9],[0,9]],[[9,9],[9,9]],[[9,9],[0,0]]
#Selection d'une bricks aléatoire et sa position ou elle apparait en haut au centre
brick = choice(bricks)
x=3
y=0
frameCount=0

#Une fonction pour renvoyer le maximum de deux valeurs
def max(a,b):
    if a>=b:
        return a
    else:
        return b

#Une fonction pour masquer la brique 2x2 sur l'écran de la carte
def hideBrick():
    if x>0:
        display.set_pixel(x-1,y,grid[y][x])
    if x<5:
        display.set_pixel(x+1-1,y,grid[y][x+1])
    if x>0 and y<4:
        display.set_pixel(x-1,y+1,grid[y+1][x])
    if x<5 and y<4:
        display.set_pixel(x+1-1,y+1,grid[y+1][x+1])

#Une fonction pour afficher la brique 2x2 sur l'écran de la carte
def showBrick():
    if x>0:
        display.set_pixel(x-1,y,max(brick[0][0],grid[y][x]))
    if x<5:
        display.set_pixel(x+1-1,y,max(brick[0][1],grid[y][x+1]))
    if x>0 and y<4:
        display.set_pixel(x-1,y+1,max(brick[1][0],grid[y+1][x]))
    if x<5 and y<4:
        display.set_pixel(x+1-1,y+1,max(brick[1][1],grid[y+1][x+1]))

#Une fonction pour faire pivoter la brique 2x2
def rotateBrick():
    pixel00 = brick[0][0]
    pixel01 = brick[0][1]
    pixel10 = brick[1][0]
    pixel11 = brick[1][1]
    #Vérifiez si la rotation est possible
    if not ((grid[y][x]>0 and pixel00>0) or (grid[y+1][x]>0 and pixel10>0) or (grid[y][x+1]>0 and pixel01>0) or (grid[y+1][x+1]>0 and pixel11>0)):
        hideBrick()
        brick[0][0] = pixel10
        brick[1][0] = pixel11
        brick[1][1] = pixel01
        brick[0][1] = pixel00
        showBrick()

#Une fonction pour déplacer/traduire la brique
def moveBrick(delta_x,delta_y):
    global x,y
    move=False
    #Vérifiez si le déplacement est possible : pas de collision avec d'autres blocs ou bordures de la grille
    if delta_x==-1 and x>0:
        if not ((grid[y][x-1]>0 and brick[0][0]>0) or (grid[y][x+1-1]>0 and brick[0][1]>0) or (grid[y+1][x-1]>0 and brick[1][0]>0) or (grid[y+1][x+1-1]>0 and brick[1][1]>0)):
            move=True
    elif delta_x==1 and x<5:
        if not ((grid[y][x+1]>0 and brick[0][0]>0) or (grid[y][x+1+1]>0 and brick[0][1]>0) or (grid[y+1][x+1]>0 and brick[1][0]>0) or (grid[y+1][x+1+1]>0 and brick[1][1]>0)):
            move=True
    elif delta_y==1 and y<4:
        if not ((grid[y+1][x]>0 and brick[0][0]>0) or (grid[y+1][x+1]>0 and brick[0][1]>0) or (grid[y+1+1][x]>0 and brick[1][0]>0) or (grid[y+1+1][x+1]>0 and brick[1][1]>0)):
            move=True
    #Si le déplacement est possible, mettez à jour les coordonnées x,y de la brique
    if move:
        hideBrick()
        x+=delta_x
        y+=delta_y
        showBrick()

    #Renvoyez True ou False pour confirmer si le déplacement a eu lieu
    return move

#Une fonction pour vérifier et supprimer les lignes complétées
def checkLines():
    global score
    removeLine=False
    #vérifier chaque ligne une à la fois
    for i in range(0, 5):
        #Si 5 blocs sont remplis (9) alors une ligne est complète (9*5=45)
        if (grid[i][1]+grid[i][2]+grid[i][3]+grid[i][4]+grid[i][5])==45:
            removeLine = True
            #Incrémenter ou Augementer le score (10 pts par ligne)
            score+=10
            #Supprimez la ligne et faites en sorte que toutes les lignes ci-dessus tombent de 1 :
            for j in range(i,0,-1):
                grid[j] = grid[j-1]
            grid[0]=[1,0,0,0,0,0,1]
    if removeLine:
        #Rafraîchir l'écran LED
        for i in range(0, 5):
            for j in range(0, 5):
                display.set_pixel(i,j,grid[j][i+1])
    return removeLine

gameOn=True
score=0
showBrick()
#Boucle du programme principal - itère toutes les 50 ms
while gameOn:
    sleep(50)
    frameCount+=1
    #Rotation des structures ou des blocs
    if button_a.is_pressed() and button_b.is_pressed():
        rotateBrick()
    elif button_a.is_pressed():
        moveBrick(-1,0)
    elif button_b.is_pressed():
        moveBrick(1,0)

    #Toutes les 15 images, essayez de déplacer la brique vers le bas
    if frameCount==15 and moveBrick(0,1) == False:
        frameCount=0
        #Le déplacement n'a pas été possible, la brique reste en place
        grid[y][x]=max(brick[0][0],grid[y][x])
        grid[y][x+1]=max(brick[0][1],grid[y][x+1])
        grid[y+1][x]=max(brick[1][0],grid[y+1][x])
        grid[y+1][x+1]=max(brick[1][1],grid[y+1][x+1])

        if checkLines()==False and y==0:
            #La brique a atteint le haut de la grille - Game Over
            gameOn=False
        else:
            #Choisir une brick aléatoire
            x=3
            y=0
            brick = choice(bricks)
            showBrick()

    if frameCount==15:
       frameCount=0

#Fin du Jeu (Affichage score et game over
sleep(2000)
display.scroll("Game Over: Score: " + str(score))

Vous pourrez trouver les différents « # » présent pour vous expliquez les différentes étapes du programme.

Pour utiliser ce programme, voici les touches principales a savoir :

Bouton A : Déplace la brique vers gauche

Bouton B : Déplace la brique vers la droite

Quand on appuie sur A et B en même temps : Cela provoque une rotation de la brique

Aucune réponse

Laisser un commentaire

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