Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Biarkan peti menutupi permata, dan cegah klik pada peti agar tidak mengenai permata.

  1. Pindahkan baris gambar peti ke setelah garis tepi permata, lalu gambar crate lagi di bawahnya dengan warna (110, 70, 35) dan lebar 3 sebagai tepinya.
  2. Di cabang MOUSEBUTTONDOWN, ubah if untuk permata menjadi elif, 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

Latihan sendiri: Playground Pygame