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.centerYalnı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.
Görev
KolayHer mücevheri kasanın altına gizle.
crateoluşturduktan hemen sonracrate.center = gem.centerayarla.- Mücevher dalında, yeni
gem.ydeğerinden sonracrate.center = gem.centerdeğ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
1Bir Kareyi Hareket Ettir
Bir Pencere AçArka Planı DoldurKendi başına pratik yap: Pygame playground