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