Berburu Permata
Termasuk bagian Perulangan Game dalam perjalanan Pygame di Coddy. Pelajaran 17 dari 32.
Sekarang peti menjadi permainan. Setiap permata muncul di bawah peti: seret peti menjauh lalu klik permata, dan peti berpindah ke permata berikutnya. Satu ronde berlangsung selama 30 detik.
Letakkan peti di atas permata dengan memberikan titik tengah permata: crate.center = gem.center. Lakukan ini sebelum perulangan dan setiap kali permata baru muncul.
Hitung waktu dalam frame. Pada 60 frame per detik, 30 detik adalah 1800 frame:
time_left = 1800
while running:
# peristiwa
if time_left > 0:
time_left -= 1Ketika time_left mencapai 0, permainan berhenti menerima klik dan seretan, lalu baris skor menampilkan hasilnya. Tambahkan and time_left > 0 ke pemeriksaan MOUSEBUTTONDOWN dan MOUSEMOTION.
Bilah di bagian atas menunjukkan sisa waktu. Lebarnya menunjukkan bagian ronde yang masih tersisa: 480 * time_left // 1800 bernilai 480 di awal, 240 di pertengahan, dan 0 di akhir.
Tantangan
Sedang- Setel
crate.center = gem.centersetelah membuat peti. Lakukan hal yang sama setelah permata yang dikumpulkan mendapat tempat baru. - Sebelum perulangan, setel
time_left = 1800. Dalam perulangan, setelah memproses peristiwa, kurangi nilainya 1 selama nilainya di atas 0. - Tangani
MOUSEBUTTONDOWNdanMOUSEMOTIONhanya saattime_left > 0. - Setelah baris skor, gambar bilah waktu: warna hijau
(120, 200, 120)pada(0, 0, 480 * time_left // 1800, 6).
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()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
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