Menu
CoddyTech

חזרה למרכז

חלק מהיחידה פרויקטים במסלול ה-Pygame של Coddy. שיעור 15 מתוך 31.

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

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

אתגר

קל

כשהכדור כולו עובר את הקצה השמאלי או הימני, יש להגדיר את center שלו ל־(300, 200) ולהפוך את 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 אונליין