Points d’ancrage
Fait partie de la section Règles du jeu du Journey Pygame de Coddy. Leçon 7 sur 29.
Un score dessiné en (10, 10) commence au bord gauche. Pour le placer plutôt au bord droit, il te faut sa largeur, qui varie avec la valeur du nombre. Un Rect fait les calculs pour toi.
text.get_rect() accepte des arguments nommés pour chacun de ses points : center, topleft, topright, midtop, midbottom et d’autres. Le Rect est placé de façon à ce que le point se trouve là où tu l’indiques :
score_rect = score_text.get_rect(topright=(470, 10))
screen.blit(score_text, score_rect)Maintenant, le bord droit du score reste à 470, qu’il affiche 0 ou 1000.
Un texte sur un arrière-plan chargé est plus facile à lire sur une plaque. inflate(12, 8) renvoie une copie du Rect, 12 pixels plus large et 8 pixels plus haute, avec le même centre. Dessine-la d’abord, puis le texte par-dessus :
pygame.draw.rect(screen, PLATE, score_rect.inflate(12, 8))Le bord droit de la plaque dépasse le texte de 6 pixels, à 476, et son bord supérieur est 4 pixels plus haut, à 6.
Défi
Moyen- Ajoute
PLATE = (60, 60, 90). - Place le score avec
topright=(470, 10)et dessine un rectanglePLATEderrière : son Rect agrandi de (12, 8). - Dans le menu, dessine un rectangle
PLATEderrièreMeteor Dodge: le Rect du titre, centré en (240, 140), agrandi de (24, 12).
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("assets/fonts/pixel.ttf", 24)
big_font = pygame.font.Font("assets/fonts/pixel.ttf", 48)
WHITE = (240, 240, 240)
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
def draw_menu():
screen.fill((30, 30, 46))
title = big_font.render("Meteor Dodge", True, WHITE)
screen.blit(title, title.get_rect(center=(240, 140)))
hint = font.render("Press Enter to play", True, WHITE)
screen.blit(hint, hint.get_rect(center=(240, 200)))
def draw_game():
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (255, 196, 0), player)
pygame.draw.rect(screen, (235, 80, 80), rock)
score_text = font.render(f"Score: {score}", True, WHITE)
screen.blit(score_text, (10, 10))
def play_frame():
global score, state
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"
draw_game()
def draw_over():
draw_game()
message = big_font.render("Game over", True, WHITE)
screen.blit(message, message.get_rect(center=(240, 160)))
hint = font.render("Press R to play again", True, WHITE)
screen.blit(hint, hint.get_rect(center=(240, 200)))
reset()
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"
elif event.key == pygame.K_r and state == "over":
reset()
state = "play"
if state == "menu":
draw_menu()
elif state == "play":
play_frame()
else:
draw_over()
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
Entraînez-vous par vous-même : Playground Pygame