Menu
CoddyTech

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

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

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

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

التحدي

سهل

عندما تتجاوز الكرة بأكملها الحافة اليسرى أو اليمنى، اضبط center على (300, 200) واعكس 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()

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

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