الإرسال
جزء من قسم المشاريع في رحلة Pygame على Coddy. الدرس 17 من 31.
بعد مرور بعض الوقت، ينبغي أن تنتظر الكرة في المنتصف حتى يصبح أحد اللاعبين مستعدًا. يحدد علم ما إذا كانت الكرة تنتظر:
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()
جميع دروس المشاريع
تدرّب بنفسك: Playground لـ Pygame