Menu
CoddyTech

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

الدرس 37 من 41 في دورة اصنع ألعابًا باستخدام 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. بعد تسجيل النقاط، عيّنه إلى "Left player wins!" عندما يكون left_score == 5، أو إلى "Right player wins!" عندما يكون right_score == 5.
  2. يُرسل مفتاح المسافة الكرة فقط عندما يكون winner is None.
  3. اعرض الفائز في المنتصف عند (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()

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

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