Avec notre groupe de trois , nous nous sommes dis qu’on allez créer le mini jeu Tetris que l’on contrôlera via les boutons de la carte micro:bit , pour déplacer les différentes briques , nous avons aussi fait un « ending » (une fin) lorsque que l’utilisateur perd sa partie on y voit son score et un « Game Over » afficher , Voici le code , qui sera d’écrit lors de notre présentation !
Nous avons réussit à associer le mouvement des bricks à un bouton différents :
Voici les commandes pour jouer :
Bouton B -> Déplace le brick à droite
Bouton A -> Déplace le brick à gauche
Bouton A+B simultanément -> Pour la rotation de la brick
#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 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))
Source d’aide :
Aucune réponse