Menu
CoddyTech
flag He iconעבריתdown icon

הגשה

שיעור 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).

challenge icon

אתגר

בינוני
  1. לפני הלולאה, הגדירו waiting = False.
  2. מקמו את תנועת הכדור, הקפיצות והניקוד תחת if not waiting:, והגדירו waiting = True אחרי כל נקודה.
  3. אירוע KEYDOWN עבור pygame.K_SPACE מגדיר את waiting = False.
  4. בזמן ההמתנה, הציגו את 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()
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יוצרים משחקים עם Pygame

תרגלו בעצמכם: Pygame אונליין