Menu
CoddyTech

חזרה למרכז

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

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

if ball.right < 0 or ball.left > 600:
    ball.center = (300, 200)
    vx = -vx

ball.right < 0 פירושו שכל הכדור עבר את הקצה השמאלי, ו-ball.left > 600 פירושו שכל הכדור עבר את הקצה הימני. הגדרת ball.center מזיזה את ה-Rect כך שמרכזו יהיה בנקודה הזאת; גודלו נשאר זהה.

הפקודה vx = -vx כאן בטוחה: הכדור נמצא באמצע, רחוק מכל מחבט.

challenge icon

אתגר

קל

החזר כדור שהוחטא אל האמצע.

  1. כאשר הכדור כולו עובר את הקצה השמאלי או הימני, קבע את center שלו ל־(300, 200).
  2. הפוך גם שם את vx.

לחץ על "שחק" והחטא את הכדור: הוא חוזר ופונה לכיוון השני. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

import pygame

pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()

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)

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)

    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)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

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

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