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

הראשון לחמש

שיעור 37 מתוך 40 בקורס יוצרים משחקים עם Pygame של Coddy.

השחקן הראשון שמגיע ל־5 נקודות מנצח. שמרו את שם המנצח במשתנה שמתחיל בתור None, הערך של Python שפירושו „עדיין כלום”:

winner = None

if left_score == 5:
    winner = "Left player wins!"
elif right_score == 5:
    winner = "Right player wins!"

בדקו זאת באמצעות winner is None או winner is not None. אחרי שמישהו ניצח, הכדור ממשיך לחכות: מקש הרווח מגיש רק כאשר winner is None.

הציגו את המנצח במרכז ב־(300, 120), במקום הודעת ההגשה.

challenge icon

אתגר

בינוני
  1. לפני הלולאה, הגדירו winner = None.
  2. אחרי הניקוד, הגדירו את winner לערך "Left player wins!" כאשר left_score == 5, או לערך "Right player wins!" כאשר right_score == 5.
  3. מקש הרווח מגיש רק כל עוד winner is None.
  4. כשיש מנצח, הציגו אותו במרכז בכתובת (300, 120) במקום Press Space to serve.

נסו בעצמכם

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
waiting = False

running = True
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

    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())

    if not waiting:
        ball.x += vx
        ball.y += vy
        if ball.top <= 0 or ball.bottom >= 400:
            vy = -vy
        if ball.colliderect(left):
            vx = abs(vx)
            vy = (ball.centery - left.centery) // 6
        if ball.colliderect(right):
            vx = -abs(vx)
            vy = (ball.centery - right.centery) // 6
        if ball.left > 600:
            left_score += 1
            ball.center = (300, 200)
            vx = -vx
            waiting = True
        if ball.right < 0:
            right_score += 1
            ball.center = (300, 200)
            vx = -vx
            waiting = True

    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)))
    if waiting:
        message = font.render("Press Space to serve", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(300, 360)))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconבחנו את עצמכם

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

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

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