חזרה למרכז
חלק מהיחידה פרויקטים במסלול ה-Pygame של Coddy. שיעור 15 מתוך 31.
כששחקן מפספס, הכדור יוצא מהחלון בצד שלו. החזירו אותו לאמצע ושלחו אותו לכיוון הצד השני.
if ball.right < 0 or ball.left > 600:
ball.center = (300, 200)
vx = -vxball.right < 0 פירושו שכל הכדור נמצא מעבר לקצה השמאלי, ו-ball.left > 600 פירושו שכל הכדור נמצא מעבר לקצה הימני. הגדרת ball.center מזיזה את ה-Rect כך שמרכזו יהיה בנקודה הזאת; גודלו נשאר זהה.
הפעולה vx = -vx בטוחה כאן: הכדור נמצא באמצע, רחוק מכל מחבט.
אתגר
קלכשהכדור כולו עובר את הקצה השמאלי או הימני, יש להגדיר את 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 אונליין