Menu
CoddyTech

Kasının Altındaki Mücevher

Coddy'nin Pygame Journey'sinin Oyun Döngüsü bölümünün bir parçası. Ders 19 / 35.

Artık sandık oyunun kendisi. Her mücevher sandığın altında belirir: sandığı sürükleyip kenara alın ve mücevhere tıklayın; sandık bir sonrakinin üzerine geçer.

Bir Rect'in center özelliği, ortasındaki noktadır. Bir Rect'in merkezini diğerinin merkezine eşitleyin; boyutları ne olursa olsun tam üst üste gelirler:

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

Yalnızca crate hareket eder ve (285, 105, 60, 60) konumuna geçer. İlk mücevher için bunu döngüden önce bir kez, ardından her mücevher yeni bir konuma geçtiğinde tekrar yapın.

challenge icon

Görev

Kolay

Her mücevheri kasanın altına gizle.

  1. crate oluşturduktan hemen sonra crate.center = gem.center ayarla.
  2. Mücevher dalında, yeni gem.y değerinden sonra crate.center = gem.center değerini tekrar ayarla.

“Oyna” düğmesine bas, kasayı sürükleyerek kenara çek ve mücevhere tıkla: kasa bir sonrakinin üzerine atlar. Ardından “Kontrol et” düğmesine bas.

Kendin dene

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

Oyun Döngüsü bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground