Permata di Bawah Peti
Termasuk bagian Perulangan Game dalam perjalanan Pygame di Coddy. Pelajaran 19 dari 35.
Sekarang peti menjadi permainannya. Setiap permata muncul di bawah peti: seret peti hingga tersingkir lalu klik permata, dan peti berpindah ke permata berikutnya.
Sebuah Rect memiliki center, titik di tengahnya. Berikan sebuah Rect titik tengah Rect lain, lalu keduanya akan bertumpuk, berapa pun ukurannya:
gem = pygame.Rect(300, 120, 30, 30)
crate = pygame.Rect(0, 0, 60, 60)
crate.center = gem.centerHanya crate yang berpindah, ke (285, 105, 60, 60). Lakukan ini sekali sebelum perulangan untuk permata pertama, lalu lakukan lagi setiap kali permata mendapat tempat baru.
Tantangan
MudahSembunyikan setiap permata di bawah peti.
- Tepat setelah membuat
crate, aturcrate.center = gem.center. - Di cabang permata, setelah
gem.yyang baru, atur lagicrate.center = gem.center.
Tekan tombol “Main”, seret peti hingga menjauh, lalu klik permata: peti akan melompat ke permata berikutnya. Lalu tekan tombol “Periksa”.
Coba sendiri
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()
Semua pelajaran di Perulangan Game
1Gerakkan Persegi
Buka JendelaIsi Latar Belakang4Bergerak Berdasarkan Waktu
Delta WaktuPiksel per DetikVector2Percepatan dan GesekanBerputar Kembali di LayarLatihan sendiri: Playground Pygame