Bonjour, je suis très pressé car j'ai bientôt mon projet à rendre pour le bac. Et donc le prblème est que quoi qu'il arrive, quand mon oiseau passe le 1er obstacle le jeu s'arrête, je ne sais pas du coup comment gérer ma collision. J'ai besoin d'aide, merci.
Le code :
import random
import pygame
from pygame.locals import *
try:
fenetre=pygame.display.set_mode((640,480)) #descripteur de la fenetre
pygame.display.set_caption("Flappy Bird") #titre dans la barre sup
fond = pygame.Surface((640,480)).convert() #cree des pixels dans la surface
fond.fill((114, 177, 228)) #colorie les pixels
#chargement des différentes images -> descripteur
image_rect=pygame.image.load("rectangle.jpg").convert()
Clock = pygame.time.Clock()
rectangle1=image_rect.get_rect() #On crée un rectangle à partir de l'image
rectangle2=image_rect.get_rect() #On crée un rectangle à partir de l'image Clock = pygame.time.Clock()
rectangle1.left=640#abscisse du rectangle du haut
rectangle2.left=640#abscisse du rectangle du haut
timer=0#variable
timer2=0
limite=100#limite du timer
oiseau1=pygame.image.load("oiseau1.png").convert_alpha() # charge l'une des images de l'oiseau
oiseau1 = pygame.transform.scale(oiseau1,(100,100)) # transforme l'image pour avoir une image de 100 x 100 pixels
oiseau2=pygame.image.load("oiseau2.png").convert_alpha() # charge l'une des images de l'oiseau
oiseau2 = pygame.transform.scale(oiseau2,(100,100)) # transforme l'image pour avoir une image de 100 x 100 pixels
oiseau3=pygame.image.load("oiseau3.png").convert_alpha() # charge l'une des images de l'oiseau
oiseau3 = pygame.transform.scale(oiseau3,(100,100)) # transforme l'image pour avoir une image de 100 x 100 pixels
oiseau4=pygame.image.load("oiseau4.png").convert_alpha() # charge l'une des images de l'oiseau
oiseau4 = pygame.transform.scale(oiseau4,(100,100)) # transforme l'image pour avoir une image de 100 x 100 pixels
oiseau = [oiseau1,oiseau2,oiseau3,oiseau4] # la liste oiseau qui contient toutes les images de ce dernier
oiseauanimation =1
continuer =-1
z=60
while continuer==-1:
#pygame.mixer.music.load("son2.wav") # charge un son
#pygame.mixer.music.play(-1,0.0) # joue la musiaue
fenetre.fill((0,0,0))
acc=pygame.image.load("acc.jpg") # image d'accueil
acc = pygame.transform.scale(acc,(640,480)) # l'image fait la taille de la fenetre
fenetre.blit(acc,(0,0)) # colle l'image sur la fenetre
police = pygame.font.Font(None ,30) # la police d'écriture, le type de police et la taille des caractères
texte = police.render("Pour jouer, appuyez sur c comme commencer", True, (0,0,0)) # le texte avec la couleur
fenetre.blit(texte, [80, 230]) # position du texte
for event in pygame.event.get():
if event.type == QUIT:
continuer=0 # on quitte le jeu
if event.type == KEYUP:
if event.key == K_c: # si on appuie sur "c"
continuer=1 # on commence le jeu
for event in pygame.event.get():
if event.type == QUIT:
continuer=0
pygame.display.flip() #
Clock.tick(20) # l'image est rafrachit 20 fois par secondes
while continuer : #boucle principale
for event in pygame.event.get():
if event.type == QUIT: # si on clique sur la croix
continuer=0 # on quitte le jeu
elif event.type == KEYDOWN: # si on appuie sur
if event.key == K_ESCAPE: # la barre espace
continuer=0 # on quitte le jeu
if event.type == pygame.KEYDOWN: # si on appuie sur
if event.key == pygame.K_UP: # la touche fleche du haut
saut = -10 # saut prend la valeur -10 = (vol)
if event.type == pygame.KEYUP: # si on lache
if event.key == pygame.K_UP: # la touche fleche du haut
saut = 12 # saut prend la valeur 12 = (gravite)
Clock.tick(60)
posy += saut # la position varie en fonction de la variable saut (saut + gravite)
fenetre.blit(fond, (0,0))#on blitte le fond
nuages()
timer=timer+1#incrementation
timer2=timer2+2
z=z+0.2
fenetre.blit(oiseau[oiseauanimation-1],(posx,posy)) # affiche la première des 4 images de l'oiseau : ce dernier a comme position posx pour
rect_bird=oiseau[oiseauanimation-1].get_rect() # l'abscisse et posy pour l'ordonée
if (oiseauanimation == 4): # si on arrive a la derniere image
oiseauanimation=1 # on remet la premiere image (boucle)
else:
oiseauanimation+=1; # a chaque fois, l'image change
if timer2>timer:
Clock.tick(z)
if timer>=limite:#si le temps limite est atteint
timer=0#timer recommence
limite=150+random.randint(0,150)#limite du timer aléatoire
milieu=150+random.randint(0,100)#milieu de l'espace entre les 2 rectangles
rectangle1.bottom=milieu-72#definit le bas du rectangle du haut
rectangle2.top=milieu+71 #ordonne du rectangle du haut+espace entre les 2 rect
new_obstacles=[rectangle1,rectangle2]#liste contenant les obstacles
liste_obstacle.append(new_obstacles)#ajoute un nouvel obstacle
for obstacle in liste_obstacle:
fenetre.blit(image_rect,obstacle[0])#pose image dans rectangle
fenetre.blit(image_rect,obstacle[1])#pose image dans rectangle
obstacle[0] = obstacle[0].move(-1,0)#decremente l'abscisse de 1
obstacle[1] = obstacle[1].move(-1,0)#decremente l'abscisse de 1
#si oiseau dans un obstacle, on arrete la boucle
if rect_bird.colliderect(obstacle[0]) or rect_bird.colliderect(obstacle[1]):
continuer=0
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Laurent Pointal
DiiKenZ wrote:
Bonjour, je suis très pressé car j'ai bientôt mon projet à rendre
pour le
bac. Et donc le prblème est que quoi qu'il arrive, quand mon
oiseau passe
le 1er obstacle le jeu s'arrête, je ne sais pas du coup comment
gérer ma
collision. J'ai besoin d'aide, merci.
C'est logique, lorsque tu détectes une collision tu mets ton continuer à 0, donc tu sorts de la boucle while continuer et ton jeu s'arrête (que veux-tu faire lorsqu'il y a une collision ???).
Sinon, d'une façon plus générale: réduit ton code à ce qui pose problème et ne pose que celui-là (typiquement, j'ai dû me faire des copies d'écran avec n'importe quoi pour avoir des fichiers images, rien que pour tester…).
Évites le 'URGENT' en majuscules, les gens qui passent par ici répondent de leur bonne volonté et sur leur temps, ton urgence n'est pas la leur.
Des trucs: Utilise des valeurs de 0 à 3 pour oiseauanimation (correspondant aux index), et un modulo 4 pour gérer le rebouclage: oiseauanimation = (oiseauanimation + 1) % 4
Dans nuages(), une boucle sur une liste de tuples serait plus propre: for pos in [(60,40), (180,100),…(550,400)]: nuage(pos[0], pos[1])
Place le code de chargement des ressources dans une fonction séparée, et le code principal dans une fonction séparée aussi (jeu() ou main()…). Tes globales devraient pouvoir devenir des locales dans la fonction principale.
Pour le chargement des fichiers "oiseau", une boucle de 4 itérations sera plus propre.
Sinon, pour du code en lycée, bravo.
A+
PS. Si tu lis l'anglais (il doit y avoir aussi une traduction fr qui traîne quelque part): http://www.catb.org/esr/faqs/smart-questions.html
DiiKenZ wrote:
Bonjour, je suis très pressé car j'ai bientôt mon projet à rendre
pour le
bac. Et donc le prblème est que quoi qu'il arrive, quand mon
oiseau passe
le 1er obstacle le jeu s'arrête, je ne sais pas du coup comment
gérer ma
collision. J'ai besoin d'aide, merci.
C'est logique, lorsque tu détectes une collision tu mets ton
continuer à 0, donc tu sorts de la boucle while continuer et ton jeu
s'arrête (que veux-tu faire lorsqu'il y a une collision ???).
Sinon, d'une façon plus générale: réduit ton code à ce qui pose
problème et ne pose que celui-là (typiquement, j'ai dû me faire des
copies d'écran avec n'importe quoi pour avoir des fichiers images,
rien que pour tester…).
Évites le 'URGENT' en majuscules, les gens qui passent par ici
répondent de leur bonne volonté et sur leur temps, ton urgence n'est
pas la leur.
Des trucs:
Utilise des valeurs de 0 à 3 pour oiseauanimation (correspondant aux
index), et un modulo 4 pour gérer le rebouclage:
oiseauanimation = (oiseauanimation + 1) % 4
Dans nuages(), une boucle sur une liste de tuples serait plus
propre:
for pos in [(60,40), (180,100),…(550,400)]:
nuage(pos[0], pos[1])
Place le code de chargement des ressources dans une fonction
séparée, et le code principal dans une fonction séparée aussi (jeu()
ou main()…). Tes globales devraient pouvoir devenir des locales dans
la fonction principale.
Pour le chargement des fichiers "oiseau", une boucle de 4 itérations
sera plus propre.
Sinon, pour du code en lycée, bravo.
A+
PS. Si tu lis l'anglais (il doit y avoir aussi une traduction fr qui
traîne quelque part):
http://www.catb.org/esr/faqs/smart-questions.html
Bonjour, je suis très pressé car j'ai bientôt mon projet à rendre
pour le
bac. Et donc le prblème est que quoi qu'il arrive, quand mon
oiseau passe
le 1er obstacle le jeu s'arrête, je ne sais pas du coup comment
gérer ma
collision. J'ai besoin d'aide, merci.
C'est logique, lorsque tu détectes une collision tu mets ton continuer à 0, donc tu sorts de la boucle while continuer et ton jeu s'arrête (que veux-tu faire lorsqu'il y a une collision ???).
Sinon, d'une façon plus générale: réduit ton code à ce qui pose problème et ne pose que celui-là (typiquement, j'ai dû me faire des copies d'écran avec n'importe quoi pour avoir des fichiers images, rien que pour tester…).
Évites le 'URGENT' en majuscules, les gens qui passent par ici répondent de leur bonne volonté et sur leur temps, ton urgence n'est pas la leur.
Des trucs: Utilise des valeurs de 0 à 3 pour oiseauanimation (correspondant aux index), et un modulo 4 pour gérer le rebouclage: oiseauanimation = (oiseauanimation + 1) % 4
Dans nuages(), une boucle sur une liste de tuples serait plus propre: for pos in [(60,40), (180,100),…(550,400)]: nuage(pos[0], pos[1])
Place le code de chargement des ressources dans une fonction séparée, et le code principal dans une fonction séparée aussi (jeu() ou main()…). Tes globales devraient pouvoir devenir des locales dans la fonction principale.
Pour le chargement des fichiers "oiseau", une boucle de 4 itérations sera plus propre.
Sinon, pour du code en lycée, bravo.
A+
PS. Si tu lis l'anglais (il doit y avoir aussi une traduction fr qui traîne quelque part): http://www.catb.org/esr/faqs/smart-questions.html
Damien Wyart
PS. Si tu lis l'anglais (il doit y avoir aussi une traduction fr qui traîne quelque part): http://www.catb.org/esr/faqs/smart-questions.html
J'en ai trouvé une ici : http://www.gnurou.org/writing/smartquestionsfr
-- DW
PS. Si tu lis l'anglais (il doit y avoir aussi une traduction fr qui
traîne quelque part):
http://www.catb.org/esr/faqs/smart-questions.html
J'en ai trouvé une ici : http://www.gnurou.org/writing/smartquestionsfr