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

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

الدرس 33 من 40 في دورة اصنع ألعابًا باستخدام 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

التحدي

سهل

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

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

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

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