Gema debajo de la caja
Parte de la sección El bucle del juego del Journey de Pygame de Coddy. Lección 19 de 35.
Ahora la caja se convierte en el juego. Cada gema aparece debajo de la caja: arrastra la caja para apartarla y haz clic en la gema; entonces la caja se mueve sobre la siguiente.
Un Rect tiene un center, el punto en su centro. Asigna a un Rect el centro de otro y quedará justo encima, independientemente de sus tamaños:
gem = pygame.Rect(300, 120, 30, 30)
crate = pygame.Rect(0, 0, 60, 60)
crate.center = gem.centerSolo se mueve crate, a (285, 105, 60, 60). Haz esto una vez antes del bucle para la primera gema y, de nuevo, cada vez que una gema tenga una nueva posición.
Desafío
FácilEsconde cada gema debajo de la caja.
- Justo después de crear
crate, establececrate.center = gem.center. - En la rama de la gema, después del nuevo
gem.y, vuelve a establecercrate.center = gem.center.
Pulsa «Jugar», arrastra la caja para apartarla y haz clic en la gema: la caja salta sobre la siguiente. Después, pulsa «Comprobar».
Pruébalo tú mismo
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Gem Hunt")
clock = pygame.time.Clock()
gem = pygame.Rect(225, 165, 30, 30)
crate = pygame.Rect(40, 230, 60, 60)
dragging = False
score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
if crate.collidepoint(event.pos):
dragging = True
elif gem.collidepoint(event.pos):
score += 1
gem.x = random.randint(15, 435)
gem.y = random.randint(55, 315)
elif event.type == pygame.MOUSEBUTTONUP:
dragging = False
elif event.type == pygame.MOUSEMOTION and dragging:
crate.move_ip(event.rel)
screen.fill((30, 30, 46))
gem_points = [gem.midtop, gem.midright, gem.midbottom, gem.midleft]
pygame.draw.polygon(screen, (80, 220, 255), gem_points)
if gem.collidepoint(pygame.mouse.get_pos()):
pygame.draw.rect(screen, (255, 196, 0), gem.inflate(10, 10), 2)
pygame.draw.rect(screen, (150, 100, 50), crate)
pygame.draw.rect(screen, (110, 70, 35), crate, 3)
for i in range(score):
pygame.draw.rect(screen, (240, 110, 180), (10 + 10 * i, 14, 8, 8))
mouse_x, mouse_y = pygame.mouse.get_pos()
pygame.draw.circle(screen, (240, 240, 240), (mouse_x, mouse_y), 10, 2)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Todas las lecciones de El bucle del juego
1Mueve un cuadrado
Abre una ventanaRellena el fondo4Movimiento basado en el tiempo
Tiempo deltaPíxeles por segundoVector2Aceleración y fricciónReaparecer al otro lado de la pantallaPractica por tu cuenta: Playground de Pygame