Gagner ou perdre
Fait partie de la section La boucle de jeu du Journey Pygame de Coddy. Leçon 29 sur 32.
La partie se termine. Ici, tu perds lorsque le nombre de vies atteint 0 et tu gagnes lorsque le score atteint 10. Tant qu’aucun de ces événements ne s’est produit, la partie est en cours.
Place tout ce qui bouge sous une seule condition, afin que tout s’arrête à la fin de la partie :
if lives > 0 and score < 10:
# les touches, le panier, le bloc, les prises et les ratésLe dessin reste en dehors de ce if : l’écran affiche toujours la dernière image, et le résultat par-dessus.
if lives == 0:
message = font.render("Game over", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))message.get_rect(center=(240, 160)) est le Rect de l’image du texte, placée avec son centre en (240, 160). Le blitting dans un Rect utilise son coin supérieur gauche, le texte est donc centré.
Défi
Moyen- Indente tout ce qui bouge (les touches, le panier, le bloc, les attrapés et les ratés) sous
if lives > 0 and score < 10:. - Après avoir dessiné le score et les vies, affiche
Game overlorsquelives == 0, ouYou win!lorsquescore == 10, centré en(240, 160).
Essayez vous-même
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)
score = 0
lives = 3
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
basket.x -= 8
if keys[pygame.K_RIGHT]:
basket.x += 8
basket.clamp_ip(screen.get_rect())
block.y += 3
if block.top > 360:
block.y = -20
block.x = random.randint(0, 460)
lives -= 1
if block.colliderect(basket):
block.y = -20
block.x = random.randint(0, 460)
score += 1
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), basket)
pygame.draw.rect(screen, (235, 80, 80), block)
score_text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(score_text, (10, 10))
lives_text = font.render(f"Lives: {lives}", True, (240, 240, 240))
screen.blit(lives_text, (370, 10))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Toutes les leçons de La boucle de jeu
1Déplacer un carré
Ouvrir une fenêtreRemplir l’arrière-plan4Déplacement en fonction du temps
Temps deltaPixels par secondeVector2Accélération et frictionBoucler autour de l’écran2Formes et couleurs
Cercles, lignes et polygonesContours et anglesUne scène de formesDes couleurs qui changent5Attrape les blocs
Le panierUn bloc qui tombeEntraînez-vous par vous-même : Playground Pygame