Makin Cepat Seiring Waktu
Termasuk bagian Perulangan Game dalam perjalanan Pygame di Coddy. Pelajaran 32 dari 32.
Sebuah game menjadi semakin sulit seiring berjalannya waktu. Di sini, balok jatuh sedikit lebih cepat setiap 10 detik.
pygame.time.set_timer(event_type, ms) mengirimkan event dengan tipe tersebut setiap ms milidetik. Buat tipe event sendiri dengan pygame.USEREVENT, yaitu angka yang dibiarkan kosong oleh pygame untuk kamu gunakan:
SPEED_UP = pygame.USEREVENT + 1
pygame.time.set_timer(SPEED_UP, 10000)
fall_speed = 3
for event in pygame.event.get():
if event.type == SPEED_UP:
fall_speed += 1Event tersebut tiba di perulangan event bersama event lainnya, sekali setiap 10 detik. Lalu, balok jatuh menggunakan block.y += fall_speed, bukan nilai tetap 3. Game baru dimulai dengan lambat lagi, jadi saat memulai ulang, fall_speed = 3 juga diatur.
Tantangan
Sedang- Di bawah font, buat
SPEED_UP = pygame.USEREVENT + 1dan mulai timer untuknya setiap 10000 ms. - Tetapkan
fall_speed = 3sebelum perulangan dan gunakan nilai itu untuk gerakan jatuh. - Tambahkan 1 ke
fall_speedsaat event SPEED_UP tiba. - Atur kembali nilainya menjadi 3 saat R memulai permainan baru.
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
paused = False
running = True
while running:
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
elif event.key == pygame.K_r and (lives == 0 or score == 10):
score = 0
lives = 3
basket.x = 200
block.y = -20
block.x = random.randint(0, 460)
if lives > 0 and score < 10 and not paused:
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)))
if lives == 0 or score == 10:
again = font.render("Press R to play again", True, (240, 240, 240))
screen.blit(again, again.get_rect(center=(240, 200)))
if paused:
message = font.render("Paused", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Perulangan Game
1Gerakkan Persegi
Buka JendelaIsi Latar Belakang4Bergerak Berdasarkan Waktu
Delta WaktuPiksel per DetikVector2Percepatan dan GesekanBerputar Kembali di Layar5Tangkap Balok
KeranjangBalok yang JatuhLatihan sendiri: Playground Pygame