العودة إلى المنتصف
جزء من قسم المشاريع في رحلة 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 هنا آمن: فالكرة في المنتصف، وبعيدة عن أي مضرب.
التحدي
سهلعندما تتجاوز الكرة بأكملها الحافة اليسرى أو اليمنى، اضبط 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