Punti di ancoraggio
Fa parte della sezione Regole di gioco del percorso Pygame di Coddy. Lezione 7 di 29.
Un punteggio disegnato in (10, 10) inizia dal bordo sinistro. Per farlo terminare invece al bordo destro, ti serve la sua larghezza, che cambia man mano che il numero cresce. Un Rect esegue i calcoli per te.
text.get_rect() accetta argomenti con nome per uno qualsiasi dei suoi punti: center, topleft, topright, midtop, midbottom e altri. Il Rect viene posizionato in modo che quel punto cada dove indichi:
score_rect = score_text.get_rect(topright=(470, 10))
screen.blit(score_text, score_rect)Ora il bordo destro del punteggio resta a 470, sia che mostri 0 o 1000.
Il testo su uno sfondo affollato è più facile da leggere su una piastra. inflate(12, 8) restituisce una copia del Rect più larga di 12 pixel e più alta di 8, con lo stesso centro. Disegnala prima, poi aggiungi il testo sopra:
pygame.draw.rect(screen, PLATE, score_rect.inflate(12, 8))Il bordo destro della piastra è 6 pixel oltre il testo, a 476, e il bordo superiore è 4 pixel più in alto, a 6.
Sfida
Medio- Aggiungi
PLATE = (60, 60, 90). - Posiziona il punteggio con
topright=(470, 10)e disegna dietro di esso un rettangoloPLATE: il suo Rect ingrandito di (12, 8). - Nel menu, disegna un rettangolo
PLATEdietroMeteor Dodge: il Rect del titolo, centrato in (240, 140), ingrandito di (24, 12).
Provalo tu
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()
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Regole di gioco
Esercitati da solo: Playground Pygame