Peti Menyembunyikan Permata
Termasuk bagian Perulangan Game dalam perjalanan Pygame di Coddy. Pelajaran 18 dari 35.
Kotak peti digambar sebelum permata, jadi permata tampak di atasnya. Agar peti bisa menutupi permata, gambar peti setelah permata: gambar yang dibuat terakhir menutupi apa yang sudah ada.
Selanjutnya, klik pada peti tidak boleh mencapai pemeriksaan permata dan mengambil permata yang tidak bisa dilihat pemain. Kedua pemeriksaan if dijalankan. Dengan elif, pemeriksaan kedua hanya dijalankan jika pemeriksaan pertama bernilai false, jadi hanya salah satunya yang menerima klik:
if crate.collidepoint(event.pos):
dragging = True
elif gem.collidepoint(event.pos):
print("Got it!")Periksa terlebih dahulu apa yang digambar di atas. Klik pada peti lalu tidak akan pernah mencapai permata di belakangnya.
Tepi yang lebih gelap membuat kotak tampak kokoh. Gambar Rect yang sama lagi dengan warna yang lebih gelap dan lebar tertentu, maka hanya garis luarnya yang digambar di atas isian.
Tantangan
MudahBiarkan peti menutupi permata, dan cegah klik pada peti agar tidak mengenai permata.
- Pindahkan baris gambar peti ke setelah garis tepi permata, lalu gambar
cratelagi di bawahnya dengan warna(110, 70, 35)dan lebar3sebagai tepinya. - Di cabang
MOUSEBUTTONDOWN, ubahifuntuk permata menjadielif, di bawah pemeriksaan peti.
Tekan tombol “Main”, seret peti ke atas permata, lalu klik peti: permata tetap tersembunyi dan tidak ada tanda merah muda yang muncul. 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
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()
Semua pelajaran di Perulangan Game
1Gerakkan Persegi
Buka JendelaIsi Latar Belakang4Bergerak Berdasarkan Waktu
Delta WaktuPiksel per DetikVector2Percepatan dan GesekanBerputar Kembali di Layar3Tetikus
Ikuti PointerKlik PermataLatihan sendiri: Playground Pygame