Menu
CoddyTech

Kasa Mücevheri Gizliyor

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

Kasa mücevherden önce çizildiği için mücevher onun üstünde görünür. Mücevherin altına gizlenebileceği bir kasa için kasayı mücevherden sonra çizin: en son çizilen, zaten orada olanın üstünü kapatır.

Ardından kasaya yapılan bir basış, mücevherin kontrolüne ulaşmamalı ve oyuncunun göremediği bir mücevheri yakalamamalıdır. İki if kontrolü de çalışır. elif ile ikincisi yalnızca ilki yanlış olduğunda çalışır; böylece basışı yalnızca biri alır:

if crate.collidepoint(event.pos):
    dragging = True
elif gem.collidepoint(event.pos):
    print("Got it!")

Önce üstte çizileni kontrol edin. Böylece kasaya yapılan basış, arkasındaki mücevhere asla ulaşmaz.

Daha koyu bir kenar, kutunun katı görünmesini sağlar. Aynı Rect'i bir genişlik değeriyle daha koyu bir renkte yeniden çizin; dolgunun üzerine yalnızca dış çizgisi çizilir.

challenge icon

Görev

Kolay

Sandığın mücevheri gizlemesini ve üzerine basıldığında mücevherin yakalanmasını önlemesini sağla.

  1. Sandığın çizim satırını mücevherin dış çizgisinden sonraya taşı ve altına kenarı olarak crate öğesini (110, 70, 35) renginde, 3 genişlikle yeniden çiz.
  2. MOUSEBUTTONDOWN dalında, mücevherin if koşulunu sandık testinin altına alıp elif olarak değiştir.

“Oyna” düğmesine bas, sandığı mücevherin üzerine sürükle ve mücevhere tıkla: mücevher gizli kalır ve pembe bir işaret görünmez. 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
            if 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))
    pygame.draw.rect(screen, (150, 100, 50), crate)
    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)
    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