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.
Görev
KolaySandığın mücevheri gizlemesini ve üzerine basıldığında mücevherin yakalanmasını önlemesini sağla.
- Sandığın çizim satırını mücevherin dış çizgisinden sonraya taşı ve altına kenarı olarak
crateöğesini(110, 70, 35)renginde,3genişlikle yeniden çiz. MOUSEBUTTONDOWNdalında, mücevherinifkoşulunu sandık testinin altına alıpelifolarak 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
1Bir Kareyi Hareket Ettir
Bir Pencere AçArka Planı DoldurKendi başına pratik yap: Pygame playground