Menu
CoddyTech

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.center

Hanya 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.

challenge icon

Tantangan

Mudah

Sembunyikan setiap permata di bawah peti.

  1. Tepat setelah membuat crate, atur crate.center = gem.center.
  2. Di cabang permata, setelah gem.y yang baru, atur lagi crate.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

Latihan sendiri: Playground Pygame