Yeniden Oynamak için R'ye Basın
Coddy'nin Pygame Journey'sinin Oyun Kuralları bölümünün bir parçası. Ders 3 / 29.
Oyun sona erdiğinde oyuncu, programı yeniden başlatmadan tekrar oynamak ister. Oyun sonu ekranına bir satır ve yeni bir oyun başlatan bir tuş ekle:
if event.key == pygame.K_r and state == "over":
player.x = 220
rock.y = -24
rock.x = random.randint(0, 456)
state = "play"Durumu tekrar "play" olarak ayarlamak yeterli değildir. Kaya hâlâ oyuncuya dokunuyor, bu yüzden sonraki karede oyun yeniden sona erer. Hareket eden nesneleri yeni bir oyun başladığında bulundukları konuma geri koy.
Bu, menüdekiyle aynı kalıptır: bir tuş, mevcut durumun kontrolü, yeni bir durum.
Görev
Kolay- Oyun bitti ekranında,
Game overifadesinin altındaPress R to play againmetnini (240, 200) konumunda ortalanmış olarak göster. - R tuşuna basıldığında ve durum
"over"olduğunda: oyuncuyu x 220 konumuna, kayayı y -24 konumuna ve rastgele 0 ile 456 arasında bir x değerine geri getir, ardından durumu"play"olarak ayarla.
Kendin dene
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Meteor Dodge")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
player = pygame.Rect(220, 300, 40, 40)
rock = pygame.Rect(random.randint(0, 456), -24, 24, 24)
score = 0
state = "menu"
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN and state == "menu":
state = "play"
if state == "play":
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 6
if keys[pygame.K_RIGHT]:
player.x += 6
player.clamp_ip(screen.get_rect())
rock.y += 4
if rock.top > 360:
rock.y = -24
rock.x = random.randint(0, 456)
score += 1
if rock.colliderect(player):
state = "over"
screen.fill((30, 30, 46))
if state == "menu":
title = font.render("Meteor Dodge", True, (240, 240, 240))
screen.blit(title, title.get_rect(center=(240, 140)))
hint = font.render("Press Enter to play", True, (240, 240, 240))
screen.blit(hint, hint.get_rect(center=(240, 200)))
else:
pygame.draw.rect(screen, (255, 196, 0), player)
pygame.draw.rect(screen, (235, 80, 80), rock)
score_text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(score_text, (10, 10))
if state == "over":
message = font.render("Game over", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Oyun Kuralları bölümündeki tüm dersler
1Oyun Durumları
Bir Durum DeğişkeniBir Menü EkranıYeniden Oynamak için R'ye BasınBir Sıfırlama FonksiyonuHer Durum için Bir FonksiyonKendi başına pratik yap: Pygame playground