Semakin Cepat Seiring Waktu
Pelajaran 18 dari 40 dalam kursus Buat Game dengan Pygame di Coddy.
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 disediakan pygame untuk kamu:
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 dengan block.y += fall_speed, bukan dengan kecepatan tetap 3. Game baru dimulai dengan lambat lagi, jadi memulai ulang juga mengatur fall_speed = 3.
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 mengatur kecepatan jatuh. - Tambahkan 1 ke
fall_speedsaat event SPEED_UP tiba. - Tetapkan 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 Buat Game dengan Pygame
2Peristiwa dan Tabrakan
KeranjangBalok yang JatuhLatihan sendiri: Playground Pygame