Menu
CoddyTech

الإرسال

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

بعد تسجيل نقطة، ينبغي أن تنتظر الكرة في المنتصف حتى يصبح أحد اللاعبين جاهزًا. يحدد متغير منطقي ما إذا كانت ستنتظر:

waiting = False

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
    # تتحرك المضارب دائمًا
    if not waiting:
        # تتحرك الكرة وترتد وتُسجِّل نقاطًا؛ وعند تسجيل نقطة تصبح waiting = True

تظل المضارب خارج جملة if، لذا يمكن للاعبين الاستعداد أثناء انتظار الكرة. الضغط على مفتاح المسافة إجراء يُنفَّذ مرة واحدة عند كل ضغطة، لذا يأتي من حدث KEYDOWN.

أثناء انتظار الكرة، اعرض Press Space to serve بالقرب من الأسفل، في المنتصف عند (300, 360).

challenge icon

التحدي

متوسط

انتظر الإرسال بعد كل نقطة.

  1. قبل الحلقة، عيّن waiting = False.
  2. ضع حركة الكرة وارتداداتها واحتساب النقاط داخل if not waiting:، وعيّن waiting = True بعد كل نقطة.
  3. يؤدي حدث KEYDOWN إلى pygame.K_SPACE إلى تعيين waiting = False. أثناء الانتظار، اعرض Press Space to serve في المنتصف عند (300, 360).

اضغط «العب» ودع الكرة تفوتك: ستنتظر في المنتصف حتى تضغط على Space. ثم اضغط «تحقق».

جرّب بنفسك

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

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = 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())

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

    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)))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

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

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