Menu
CoddyTech

العب مجددًا

جزء من قسم حلقة اللعبة في رحلة Pygame على Coddy. الدرس 31 من 32.

بعد انتهاء اللعبة، لا ينبغي أن يضطر اللاعب إلى إعادة تشغيل البرنامج. اجعل R يبدأ لعبة جديدة: أعد كل قيمة تغيّرت إلى ما كانت عليه في البداية.

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)

الشرط مهم. من دون (lives == 0 or score == 10)، سيمحو R النتيجة في منتصف اللعبة. تجمع الأقواس بين حالتي النهاية، لذا ينطبق and عليهما كلتيهما.

أخبر اللاعب بالمفتاح: اعرض Press R to play again أسفل النتيجة.

challenge icon

التحدي

متوسط
  1. في فرع KEYDOWN، عندما يكون المفتاح pygame.K_r وتنتهي اللعبة، اضبط النتيجة على 0، وعدد الأرواح على 3، وbasket.x على 200، وأسقط كتلة جديدة من y = -20 عند موضع x عشوائي.
  2. عندما تنتهي اللعبة، اعرض أيضًا Press R to play again في المنتصف عند (240, 200).

جرّب بنفسك

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

    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 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()

جميع دروس حلقة اللعبة

تدرّب بنفسك: Playground لـ Pygame