Menu
CoddyTech

Jeda

Pelajaran 16 dari 40 dalam kursus Buat Game dengan Pygame di Coddy.

Ada dua cara untuk membaca tombol keyboard. pygame.key.get_pressed() menunjukkan tombol apa yang sedang ditekan saat ini, di setiap frame: cocok untuk bergerak. Sebuah peristiwa KEYDOWN muncul sekali, pada frame saat tombol mulai ditekan: cocok untuk tindakan yang hanya terjadi sekali setiap kali tombol ditekan.

Menjeda adalah tindakan yang hanya terjadi sekali setiap kali tombol ditekan. Dengan get_pressed, menahan P sebentar akan mengaktifkan dan menonaktifkan jeda di setiap frame. Dengan peristiwa, jeda berubah sekali:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        running = False
    elif event.type == pygame.KEYDOWN:
        if event.key == pygame.K_p:
            paused = not paused

not paused mengubah True menjadi False, dan sebaliknya. Tambahkan kondisi jeda ke kondisi yang menjalankan game, lalu tampilkan Paused saat jeda aktif.

challenge icon

Tantangan

Sedang
  1. Sebelum perulangan, atur paused = False.
  2. Di dalam perulangan peristiwa, ubah nilai paused saat tombol pada peristiwa KEYDOWN adalah pygame.K_p.
  3. Jalankan game hanya saat tidak dijeda: if lives > 0 and score < 10 and not paused:.
  4. Saat paused bernilai true, tampilkan Paused di tengah pada (240, 160).

Coba sendiri

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)
score = 0
lives = 3

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    if lives > 0 and score < 10:
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            basket.x -= 8
        if keys[pygame.K_RIGHT]:
            basket.x += 8
        basket.clamp_ip(screen.get_rect())

        block.y += 3
        if block.top > 360:
            block.y = -20
            block.x = random.randint(0, 460)
            lives -= 1
        if block.colliderect(basket):
            block.y = -20
            block.x = random.randint(0, 460)
            score += 1

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.draw.rect(screen, (235, 80, 80), block)
    score_text = font.render(f"Score: {score}", True, (240, 240, 240))
    screen.blit(score_text, (10, 10))
    lives_text = font.render(f"Lives: {lives}", True, (240, 240, 240))
    screen.blit(lives_text, (370, 10))
    if lives == 0:
        message = font.render("Game over", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(240, 160)))
    elif score == 10:
        message = font.render("You win!", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(240, 160)))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Buat Game dengan Pygame

Latihan sendiri: Playground Pygame