Menu
CoddyTech

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.

challenge icon

Görev

Kolay
  1. Oyun bitti ekranında, Game over ifadesinin altında Press R to play again metnini (240, 200) konumunda ortalanmış olarak göster.
  2. 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

Kendi başına pratik yap: Pygame playground