Une fonction de réinitialisation
Fait partie de la section Règles du jeu du Journey Pygame de Coddy. Leçon 4 sur 29.
Jouez à une partie, marquez quelques points, perdez, puis appuyez sur R. La nouvelle partie commence avec l’ancien score. Chaque valeur modifiée par une partie doit retrouver sa valeur initiale, et on en oublie souvent une.
Placez toutes les valeurs initiales dans une seule fonction et appelez-la avant la première partie et lorsque vous appuyez sur R :
def reset():
global player, rock, score
player = pygame.Rect(220, 300, 40, 40)
rock = pygame.Rect(random.randint(0, 456), -24, 24, 24)
score = 0
reset()La ligne global est importante. Une variable à laquelle vous affectez une valeur dans une fonction appartient à cette fonction, sauf indication contraire. Sans global, score = 0 créerait une nouvelle variable locale score qui disparaîtrait à la fin de la fonction, et le score du jeu ne changerait pas.
Désormais, le démarrage d’une partie n’est écrit qu’une seule fois. Lorsque vous ajouterez une valeur plus tard, comme le nombre de vies, vous l’ajouterez à un seul endroit, et la première partie comme chaque nouvelle partie la prendront en compte.
Défi
Moyen- Écris
reset()pour définir les valeurs initiales deplayer,rocketscore, avecglobal player, rock, scorecomme première ligne. - Appelle
reset()une fois avant la boucle, à la place des trois lignes qui les définissent. - Sur R, appelle
reset()et définis l’état sur"play".
Essayez vous-même
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Meteor Dodge")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
player = pygame.Rect(220, 300, 40, 40)
rock = pygame.Rect(random.randint(0, 456), -24, 24, 24)
score = 0
state = "menu"
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN and state == "menu":
state = "play"
if event.key == pygame.K_r and state == "over":
player.x = 220
rock.y = -24
rock.x = random.randint(0, 456)
state = "play"
if state == "play":
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 6
if keys[pygame.K_RIGHT]:
player.x += 6
player.clamp_ip(screen.get_rect())
rock.y += 4
if rock.top > 360:
rock.y = -24
rock.x = random.randint(0, 456)
score += 1
if rock.colliderect(player):
state = "over"
screen.fill((30, 30, 46))
if state == "menu":
title = font.render("Meteor Dodge", True, (240, 240, 240))
screen.blit(title, title.get_rect(center=(240, 140)))
hint = font.render("Press Enter to play", True, (240, 240, 240))
screen.blit(hint, hint.get_rect(center=(240, 200)))
else:
pygame.draw.rect(screen, (255, 196, 0), player)
pygame.draw.rect(screen, (235, 80, 80), rock)
score_text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(score_text, (10, 10))
if state == "over":
message = font.render("Game over", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
hint = font.render("Press R to play again", True, (240, 240, 240))
screen.blit(hint, hint.get_rect(center=(240, 200)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Règles du jeu
1États du jeu
Une variable d’étatUn écran de menuAppuyez sur R pour rejouerUne fonction de réinitialisationUne fonction par étatEntraînez-vous par vous-même : Playground Pygame