Menu
CoddyTech

اصطدم بالمضرب

جزء من قسم المشاريع في رحلة Pygame على Coddy. الدرس 14 من 31.

عندما تلمس الكرة أحد المضربين، ينبغي أن تتجه إلى الجهة الأخرى. تخبرك ball.colliderect(right) بأنهما يتلامسان.

قلب الإشارة باستخدام vx = -vx ينطوي على مشكلة. إذا ظلت الكرة داخل المضرب في الإطار التالي (لأنها اصطدمت بطرف المضرب، أو لأن المضرب تحرك نحوها)، فستُقلب الإشارة مرة أخرى، ثم مرة أخرى: فتهتز الكرة داخل المضرب.

حدّد الاتجاه بدلًا من قلبه. abs(vx) هي قيمة vx من دون إشارتها، لذا تكون موجبة دائمًا:

if ball.colliderect(left):
    vx = abs(vx)
if ball.colliderect(right):
    vx = -abs(vx)

عند ارتداد الكرة عن المضرب الأيسر، تتجه دائمًا إلى اليمين، وعند ارتدادها عن المضرب الأيمن، تتجه دائمًا إلى اليسار، مهما بلغ عدد الإطارات التي تتلامس فيها معه.

challenge icon

التحدي

متوسط

بعد ارتداد الكرة عن الجدار، عندما تصطدم بـ left، عيّن vx = abs(vx)؛ وعندما تصطدم بـ right، عيّن vx = -abs(vx).

جرّب بنفسك

import pygame

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

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)

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

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

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

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

جميع دروس المشاريع

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