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

أول من يصل إلى خمسة

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

يفوز اللاعب الأول الذي يصل إلى 5 نقاط. احتفظ باسم الفائز في متغير تبدأ قيمته بـ None، وهي قيمة Python التي تعني «لا شيء حتى الآن»:

winner = None

if left_score == 5:
    winner = "Left player wins!"
elif right_score == 5:
    winner = "Right player wins!"

اختبر ذلك باستخدام winner is None أو winner is not None. بعد فوز أحدهم، تظل الكرة في انتظار الإرسال: لا تُرسل الكرة بالضغط على Space إلا عندما تكون قيمة winner هي None.

اعرض اسم الفائز في الوسط عند (300, 120)، بدلًا من رسالة الإرسال.

challenge icon

التحدي

متوسط
  1. قبل الحلقة، عيّن winner = None.
  2. بعد احتساب النقاط، عيّن winner إلى "Left player wins!" عندما يكون left_score == 5، أو إلى "Right player wins!" عندما يكون right_score == 5.
  3. تُستخدم مفتاح المسافة للإرسال فقط عندما يكون winner is None.
  4. عندما يكون هناك فائز، اعرضه في المنتصف عند (300, 120) بدلًا من Press Space to serve.

جرّب بنفسك

import pygame

pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 36)

ball = pygame.Rect(293, 193, 14, 14)
vx, vy = 5, 4
left = pygame.Rect(20, 160, 12, 80)
right = pygame.Rect(568, 160, 12, 80)
left_score = 0
right_score = 0
waiting = False

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            waiting = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_w]:
        left.y -= 6
    if keys[pygame.K_s]:
        left.y += 6
    if keys[pygame.K_UP]:
        right.y -= 6
    if keys[pygame.K_DOWN]:
        right.y += 6
    left.clamp_ip(screen.get_rect())
    right.clamp_ip(screen.get_rect())

    if not waiting:
        ball.x += vx
        ball.y += vy
        if ball.top <= 0 or ball.bottom >= 400:
            vy = -vy
        if ball.colliderect(left):
            vx = abs(vx)
            vy = (ball.centery - left.centery) // 6
        if ball.colliderect(right):
            vx = -abs(vx)
            vy = (ball.centery - right.centery) // 6
        if ball.left > 600:
            left_score += 1
            ball.center = (300, 200)
            vx = -vx
            waiting = True
        if ball.right < 0:
            right_score += 1
            ball.center = (300, 200)
            vx = -vx
            waiting = True

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), left)
    pygame.draw.rect(screen, (235, 80, 80), right)
    pygame.draw.rect(screen, (255, 196, 0), ball)
    score = font.render(f"{left_score} : {right_score}", True, (240, 240, 240))
    screen.blit(score, score.get_rect(center=(300, 30)))
    if waiting:
        message = font.render("Press Space to serve", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(300, 360)))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconاختبر نفسك

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

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

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