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

פגע במחבט

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

כשהכדור נוגע במחבט, הוא אמור לחזור לכיוון השני. ball.colliderect(right) אומר לך שהם נוגעים.

להפיכת הסימן, vx = -vx, יש מלכודת. אם הכדור עדיין בתוך המחבט בפריים הבא (הוא פגע בקצה המחבט, או שהמחבט זז אליו), הסימן מתהפך שוב ושוב: הכדור רועד בתוך המחבט.

קבעו את הכיוון במקום להפוך אותו. abs(vx) הוא vx בלי הסימן שלו, ולכן הוא תמיד חיובי:

if ball.colliderect(left):
    vx = abs(vx)
if ball.colliderect(right):
    vx = -abs(vx)

מהמחבט השמאלי הכדור תמיד נע ימינה, ומהמחבט הימני תמיד שמאלה, בלי קשר למספר הפריימים שבהם הם נוגעים.

challenge icon

אתגר

בינוני

לאחר שהכדור קופץ מהקיר, כשהוא מתנגש ב־left, יש להגדיר vx = abs(vx); כשהוא מתנגש ב־right, יש להגדיר vx = -abs(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

    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()
quiz iconבחנו את עצמכם

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

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

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