الإرسال
الدرس 35 من 40 في دورة اصنع ألعابًا باستخدام 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).
جرّب بنفسك
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