Menu
CoddyTech

La gemme sous la caisse

Fait partie de la section La boucle de jeu du Journey Pygame de Coddy. Leçon 19 sur 35.

Maintenant, la caisse devient le jeu. Chaque gemme apparaît sous la caisse : fais glisser la caisse pour la déplacer, puis clique sur la gemme, et la caisse se déplace sur la suivante.

Un Rect a un center, le point situé en son milieu. Donne à un Rect le centre d’un autre, et il se place juste au-dessus de celui-ci, quelles que soient leurs tailles :

gem = pygame.Rect(300, 120, 30, 30)
crate = pygame.Rect(0, 0, 60, 60)
crate.center = gem.center

Seule crate se déplace, vers (285, 105, 60, 60). Fais cela une fois avant la boucle pour la première gemme, puis à nouveau chaque fois qu’une gemme reçoit un nouvel emplacement.

challenge icon

Défi

Facile

Cache chaque gemme sous la caisse.

  1. Juste après avoir créé crate, définis crate.center = gem.center.
  2. Dans la branche de la gemme, après le nouveau gem.y, définis à nouveau crate.center = gem.center.

Appuie sur « Jouer », fais glisser la caisse pour la déplacer, puis clique sur la gemme : la caisse se déplace sur la suivante. Ensuite, appuie sur « Vérifier ».

Essayez vous-même

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()

Toutes les leçons de La boucle de jeu

Entraînez-vous par vous-même : Playground Pygame