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

الإرسال

الدرس 35 من 40 في دورة اصنع ألعابًا باستخدام 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.
  4. أثناء الانتظار، اعرض Press Space to serve في المنتصف عند (300, 360).

جرّب بنفسك

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()
quiz iconاختبر نفسك

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

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

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