Menu
CoddyTech

הראשון שמגיע לחמש

שיעור 37 מתוך 41 בקורס צרו משחקים עם 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. אחרי הניקוד, הגדירו אותו ל-"Left player wins!" כאשר left_score == 5, או ל-"Right player wins!" כאשר right_score == 5.
  2. מקש הרווח מגיש רק כאשר winner is None.
  3. הציגו את המנצח במרכז ב-(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()

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

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