הגשה
שיעור 35 מתוך 40 בקורס יוצרים משחקים עם Pygame של Coddy.
אחרי נקודה, הכדור אמור להמתין במרכז עד שאחד השחקנים יהיה מוכן. דגל מציין אם הוא ממתין:
waiting = False
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
waiting = False
# המחבטים נעים תמיד
if not waiting:
# הכדור נע, קופץ ומזכה בנקודות; נקודה קובעת waiting = Trueהמחבטים נשארים מחוץ ל־if, כדי שהשחקנים יוכלו להתכונן בזמן שהכדור ממתין. מקש הרווח מפעיל פעולה פעם אחת בכל לחיצה, לכן האירוע מגיע מאירוע KEYDOWN.
בזמן שהכדור ממתין, הציגו בתחתית, במרכז, את Press Space to serve במיקום (300, 360).
אתגר
בינוני- לפני הלולאה, הגדירו
waiting = False. - מקמו את תנועת הכדור, הקפיצות והניקוד תחת
if not waiting:, והגדירוwaiting = Trueאחרי כל נקודה. - אירוע KEYDOWN עבור
pygame.K_SPACEמגדיר אתwaiting = False. - בזמן ההמתנה, הציגו את
Press Space to serveבמרכז, בכתובת(300, 360).
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 36)
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)
left_score = 0
right_score = 0
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)
if ball.left > 600:
left_score += 1
ball.center = (300, 200)
vx = -vx
if ball.right < 0:
right_score += 1
ball.center = (300, 200)
vx = -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)
score = font.render(f"{left_score} : {right_score}", True, (240, 240, 240))
screen.blit(score, score.get_rect(center=(300, 30)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יוצרים משחקים עם Pygame
תרגלו בעצמכם: Pygame אונליין