Menu
CoddyTech
flag Ar iconالعربيةdown icon

العب مجددًا

الدرس 17 من 40 في دورة اصنع ألعابًا باستخدام Pygame على Coddy.

بعد انتهاء اللعبة، يجب ألا يضطر اللاعب إلى إعادة تشغيل البرنامج. اجعل المفتاح 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()
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس اصنع ألعابًا باستخدام Pygame

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