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.centerSeule 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.
Défi
FacileCache chaque gemme sous la caisse.
- Juste après avoir créé
crate, définiscrate.center = gem.center. - Dans la branche de la gemme, après le nouveau
gem.y, définis à nouveaucrate.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
1Déplacer un carré
Ouvrir une fenêtreRemplir l’arrière-plan4Déplacement en fonction du temps
Temps deltaPixels par secondeVector2Accélération et frictionBoucler autour de l’écranEntraînez-vous par vous-même : Playground Pygame