Menu
CoddyTech

العودة إلى المنتصف

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

عندما يُفوّت أحد اللاعبين الكرة، تخرج الكرة من النافذة من جهته. أعدها إلى المنتصف وأرسلها نحو الجهة الأخرى.

if ball.right < 0 or ball.left > 600:
    ball.center = (300, 200)
    vx = -vx

يعني ball.right < 0 أن الكرة بأكملها تجاوزت الحافة اليسرى، ويعني ball.left > 600 أن الكرة بأكملها تجاوزت الحافة اليمنى. يؤدي ضبط ball.center إلى تحريك Rect بحيث يصبح منتصفه عند تلك النقطة؛ ويظل حجمه كما هو.

إن vx = -vx هنا آمن: فالكرة في المنتصف، بعيدة عن أي مضرب.

challenge icon

التحدي

سهل

أعِد الكرة التي فاتتك إلى المنتصف.

  1. عندما تتجاوز الكرة بالكامل الحافة اليسرى أو اليمنى، اضبط center على (300, 200).
  2. اعكس اتجاه 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
    if ball.colliderect(left):
        vx = abs(vx)
    if ball.colliderect(right):
        vx = -abs(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)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

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

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