الإرسال
الدرس 35 من 41 في دورة اصنع ألعابًا باستخدام Pygame على Coddy.
بعد تسجيل نقطة، ينبغي أن تنتظر الكرة في المنتصف حتى يصبح أحد اللاعبين جاهزًا. يحدد متغير منطقي ما إذا كانت ستنتظر:
waiting = False
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
waiting = False
# تتحرك المضارب دائمًا
if not waiting:
# تتحرك الكرة وترتد وتُسجِّل نقاطًا؛ وعند تسجيل نقطة تصبح waiting = Trueتظل المضارب خارج جملة if، لذا يمكن للاعبين الاستعداد أثناء انتظار الكرة. الضغط على مفتاح المسافة إجراء يُنفَّذ مرة واحدة عند كل ضغطة، لذا يأتي من حدث KEYDOWN.
أثناء انتظار الكرة، اعرض Press Space to serve بالقرب من الأسفل، في المنتصف عند (300, 360).
التحدي
متوسطانتظر الإرسال بعد كل نقطة.
- قبل الحلقة، عيّن
waiting = False. - ضع حركة الكرة وارتداداتها واحتساب النقاط داخل
if not waiting:، وعيّنwaiting = Trueبعد كل نقطة. - يؤدي حدث KEYDOWN إلى
pygame.K_SPACEإلى تعيينwaiting = False. أثناء الانتظار، اعرضPress Space to serveفي المنتصف عند(300, 360).
اضغط «العب» ودع الكرة تفوتك: ستنتظر في المنتصف حتى تضغط على Space. ثم اضغط «تحقق».
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 36)
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)
left_score = 0
right_score = 0
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)
if ball.left > 600:
left_score += 1
ball.center = (300, 200)
vx = -vx
if ball.right < 0:
right_score += 1
ball.center = (300, 200)
vx = -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)
score = font.render(f"{left_score} : {right_score}", True, (240, 240, 240))
screen.blit(score, score.get_rect(center=(300, 30)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
جميع دروس اصنع ألعابًا باستخدام Pygame
تدرّب بنفسك: Playground لـ Pygame