Bonjour à tous =)
Je viens ici pour avoir un peu d'aide sur une fonction bien précise de mon programme celui-ci consiste à imiter en grande partie un Tetris que l'on peut retrouver n'importe où sur internet.
Cependant, même après des recherches, nous ne comprenons pas ce qu'il y a à disposition, car nous n'avons pas encore le niveau requis pour comprendre (Seulement une année d'informatique et science du numérique en terminale ^^" ). Donc je suis en terminale et nous souhaitons avec mon meilleur ami juste un peu d'aide afin de terminer notre projet de fin d'année pour le bac ^^
Ainsi, l'endroit où nous bloquons est le moment où nous devons éliminer une ligne, puis faire descendre d'un bloc tout les blocs situés au-dessus. (Je préfère le dire maintenant, nous n'utilisons pas les classes ^^" ). Bref, nous avons déjà supprimé la ligne complète, et nous avons tenté de faire descendre tout les blocs au-dessus. Les positions des blocs sont stockés dans une liste appelée "liste_sprite_occupés". Nous avons fait descendre toutes les positions des blocs au-dessus d'une liste (Cette liste est composée de 13 listes qui équivalent à une hauteur d'un seul carré).
Le problème étant que nous n'arrivons pas à faire descendre visuellement les blocs, ce qui pose problème au niveau des lignes ! Dans les listes, elles sont bien descendues, mais pas visuellement. Ce que je n'ai pas précisé, c'est que pour que les blocs s'arrêtent les un au-dessus des autres, nous avons utilisé une reconnaissance de couleur (un .get_at). Ainsi, les nouveaux blocs arrivant se posent sur les anciens blocs, mais qui ne sont pas à la bonne position ! Cela entraine donc des problèmes car des listes qui sont vides ont à leur place (visuellement) des blocs, ce qui empêche de continuer la partie très longtemps car l'élimination des lignes ne se fait plus correctement ...
Enfin bon ! Je vous met ci-dessous un petit aperçu de nos fonctions permettant d'éliminer la ligne, puis ce qu'on a tenté d'écrire pour faire descendre tout les blocs au-dessus ...
def suppression_ligne_complete(liste_sprite_occupés,fond,fenetre):
index,effacer_ligne=supprimer_ligne_complète_partie1(liste_sprite_occupés)
if effacer_ligne==True:
creation_du_bloc_à_descendre(index)
suppression_ligne_complète_partie2(liste_sprite_occupés,fond,fenetre,index)
def supprimer_ligne_complète_partie1(liste_sprite_occupés):
effacer_ligne=False
index=0
for i in range (0,len(liste_sprite_occupés)):
if len(liste_sprite_occupés[i])==10:
effacer_ligne=True
index=i
return(index,effacer_ligne)
def suppression_ligne_complète_partie2(liste_sprite_occupés,fond,fenetre,index):
surface_bloc_a_descendre=pygame.image.load("bloc_a_descendre.pbm" )
rect_bloc_a_descendre=surface_bloc_a_descendre.get_rect()
liste_sprite_occupés[index]=[]
for i in range(0,index-1):
liste_sprite_occupés[index-i]=liste_sprite_occupés[index-i-1]
pygame.draw.rect(fond, (200, 173, 127, 255), (0,index*50,500,50))
for i in range (0,50):
rect_bloc_a_descendre.move(0,1)
pygame.display.flip()
def creation_du_bloc_à_descendre(index):
image=open("bloc_a_descendre.pbm","w" )
image.write("P3\n" )
image.write("500\n" )
image.write(str(index*50)+"\n)
image.write("255\n" )
for i in range (0,index*50):
for j in range (0,500):
image.write(str(255)+" "+str(255)+" "+str(255)+" " )
image.write("\n" )
image.close()
Je ne sais pas si vous comprendrez tout, on nous a dit quelque fois que notre travail était un peu farfelu mais qu'il marchait très bien quand même ^^"
Bref, je reste ici afin de répondre à vos questions si vous en avez, mais aussi pour voir si quelqu'un réussi à m'aider
Merci d'avoir jeté un coup d’œil à ma requête ! J'espère que quelqu'un pourra nous aider
Message édité par tetrisisn le 06-05-2015 à 17:22:18