Menu
CoddyTech

פגיעה במחבט

שיעור 32 מתוך 41 בקורס צרו משחקים עם 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

אתגר

בינוני

הקפיצו את הכדור מהמחבטים.

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

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

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