العودة إلى المنتصف
الدرس 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 هنا آمن: فالكرة في المنتصف، بعيدة عن أي مضرب.
التحدي
سهلعندما تتجاوز الكرة بالكامل الحافة اليسرى أو اليمنى، اضبط 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()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس اصنع ألعابًا باستخدام Pygame
1حلقة اللعبة
افتح نافذةاملأ الخلفية4لاعبان وكرة
الكرةالارتدادتدرّب بنفسك: Playground لـ Pygame