Menu
CoddyTech

Jeda

Termasuk bagian Perulangan Game dalam perjalanan Pygame di Coddy. Pelajaran 30 dari 32.

Ada dua cara untuk membaca keyboard. pygame.key.get_pressed() menunjukkan tombol yang sedang ditahan saat ini, di setiap frame: cocok untuk bergerak ke kanan. Event KEYDOWN muncul satu kali, pada frame saat tombol ditekan, seperti MOUSEBUTTONDOWN untuk klik: 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 event, jeda berubah satu kali:

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 jeda ke kondisi yang menjalankan game, lalu tampilkan Paused saat jeda aktif.

challenge icon

Tantangan

Sedang
  1. Sebelum perulangan, atur paused = False.
  2. Dalam perulangan event, ubah nilai paused saat key dari event 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()

Semua pelajaran di Perulangan Game

Latihan sendiri: Playground Pygame