Zamanla Hızlan
Coddy'nin Pygame Journey'sinin Oyun Döngüsü bölümünün bir parçası. Ders 32 / 32.
Oyun ilerledikçe zorlaşır. Burada bloklar her 10 saniyede bir biraz daha hızlı düşer.
pygame.time.set_timer(event_type, ms), belirtilen türde bir olayı her ms milisaniyede bir gönderir. pygame.USEREVENT ile kendi olay türünü oluştur; bu, pygame'in senin için boş bıraktığı bir sayıdır:
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 += 1Olay, diğerleriyle birlikte olay döngüsüne her 10 saniyede bir gelir. Sonra blok, sabit 3 değeri yerine block.y += fall_speed ile düşer. Yeni bir oyun yine yavaş başlar, bu yüzden yeniden başlatma sırasında fall_speed = 3 de ayarlanır.
Görev
Orta- Yazı tipinin altına
SPEED_UP = pygame.USEREVENT + 1yazın ve bu olay için her 10000 ms'de bir zamanlayıcı başlatın. - Döngüden önce
fall_speed = 3olarak ayarlayın ve düşüşte bu değeri kullanın. - Bir SPEED_UP olayı geldiğinde
fall_speeddeğerini 1 artırın. - R yeni bir oyun başlattığında değeri tekrar 3 olarak ayarlayın.
Kendin dene
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()
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Oyun Döngüsü bölümündeki tüm dersler
1Bir Kareyi Hareket Ettir
Bir Pencere AçArka Planı Doldur2Şekiller ve Renkler
Daireler, Çizgiler, ÇokgenlerKonturlar ve KöşelerŞekillerden Oluşan Bir SahneDeğişen Renkler5Blokları Yakala
SepetDüşen Bir BlokKendi başına pratik yap: Pygame playground